UIImageView方面适合和中心
我有一个图像视图,以编程方式声明,我也设置其形象,也编程。
但是,我发现自己无法将图像设置为适合方面并将中心alignment到图像视图。
换句话说,我希望图像:
- 如果图像很大,则缩小以适应该方面。
- 中心,但不放大,如果图像很小。
我如何得到这个?
刚刚贴上解决scheme:
就像@manohar所说
imageView.contentMode = UIViewContentModeCenter; if (imageView.bounds.size.width > ((UIImage*)imagesArray[i]).size.width && imageView.bounds.size.height > ((UIImage*)imagesArray[i]).size.height) { imageView.contentMode = UIViewContentModeScaleAspectFit; }
解决了我的问题
在swift语言中我们可以设置UIImage视图的内容模式如下:
let newImgThumb = UIImageView(frame: CGRect(x: 10, y: 10, width: 100, height: 100)) newImgThumb.contentMode = .scaleAspectFit
[your_imageview setContentMode:UIViewContentModeCenter];
将imageView的contentMode设置为UIViewContentModeScaleAspectFit
就足够了。 它似乎也中心的图像。 我不确定为什么其他人正在使用基于图像的逻辑。 请参阅此问题: iOS方面适合和中心
我解决了这个问题
- setImage到
UIImageView
(带有UIViewContentModeScaleAspectFit
) - get imageSize
(CGSize imageSize = imageView.image.size)
-
UIImageView
resize。[imageView sizeThatFits:imageSize]
- 移动你想要的位置。
我想UIView放在UICollectionViewCell
的顶部中心。 所以,我使用了这个function。
- (void)setImageToCenter:(UIImageView *)imageView { CGSize imageSize = imageView.image.size; [imageView sizeThatFits:imageSize]; CGPoint imageViewCenter = imageView.center; imageViewCenter.x = CGRectGetMidX(self.contentView.frame); [imageView setCenter:imageViewCenter]; }
这个对我有用。
您可以通过将图像视图的内容模式设置为UIViewContentModeScaleAspectFill来实现此目的。
然后使用下面的方法获取resize的uiimage对象。
- (UIImage*)setProfileImage:(UIImage *)imageToResize onImageView:(UIImageView *)imageView { CGFloat width = imageToResize.size.width; CGFloat height = imageToResize.size.height; float scaleFactor; if(width > height) { scaleFactor = imageView.frame.size.height / height; } else { scaleFactor = imageView.frame.size.width / width; } UIGraphicsBeginImageContextWithOptions(CGSizeMake(width * scaleFactor, height * scaleFactor), NO, 0.0); [imageToResize drawInRect:CGRectMake(0, 0, width * scaleFactor, height * scaleFactor)]; UIImage *resizedImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return resizedImage; }
编辑在这里(迅捷版)
func setProfileImage(imageToResize: UIImage, onImageView: UIImageView) -> UIImage { let width = imageToResize.size.width let height = imageToResize.size.height var scaleFactor: CGFloat if(width > height) { scaleFactor = onImageView.frame.size.height / height; } else { scaleFactor = onImageView.frame.size.width / width; } UIGraphicsBeginImageContextWithOptions(CGSizeMake(width * scaleFactor, height * scaleFactor), false, 0.0) imageToResize.drawInRect(CGRectMake(0, 0, width * scaleFactor, height * scaleFactor)) let resizedImage = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() return resizedImage; }
如果图像不大于视图,则该子类使用中心,否则将缩小。 我发现这对于更改大小的UIImageView
很有用。
它显示的图像比大尺寸的视图小,但比小尺寸的视图大。 我只希望它缩小,但不是。
class CenterScaleToFitImageView: UIImageView { override var bounds: CGRect { didSet { adjustContentMode() } } override var image: UIImage? { didSet { adjustContentMode() } } func adjustContentMode() { guard let image = image else { return } if image.size.width > bounds.size.width || image.size.height > bounds.size.height { contentMode = .ScaleAspectFit } else { contentMode = .Center } } }
let bannerImageView = UIImageView(); bannerImageView.contentMode = .ScaleAspectFit; bannerImageView.frame = CGRectMake(cftX, cftY, ViewWidth, scrollHeight);