我正在使用UIImageView的contentMode属性。
当我将其设置为UIViewContentModeScaleAspectFill时,图像会缩放以适合屏幕。 它集中在一起。因此,左右(或顶部和底部,取决于屏幕方向)图片的一部分被剪裁。
我想要有相同的行为,但不是居中。是否可以仅在右侧(或左侧)剪切图像? (再取决于方向的顶部或底部)?
感谢
答案 0 :(得分:6)
我知道自2月份以来已经有一段时间了,但我刚刚在我正在开发的应用程序中遇到了同样的需求。
我使用自定义UIImageView解决了它,它可以很容易地集成到您现有的代码中(它是UIImageView的替代品)。
您可以在github上找到该类,并附带一个示例: https://github.com/reydanro/UIImageViewAligned
希望这可以帮助您完成下一个项目
答案 1 :(得分:0)
iOS的方法是操纵UIImageView图层的contentsRect。考虑以下示例(在我的自定义UIImageView子类中)左对齐或右对齐(而不是默认的中心):
- (void)updateImageViewContentsRect {
CGRect imageViewContentsRect = CGRectMake(0, 0, 1, 1);
if (self.image.size.height > 0 && self.bounds.size.height > 0) {
CGRect imageViewBounds = self.bounds;
CGSize imageSize = self.image.size;
CGFloat imageViewFactor = imageViewBounds.size.width / imageViewBounds.size.height;
CGFloat imageFactor = imageSize.width / imageSize.height;
if (self.alignmentMode == AHTImageAlignmentModeLeft) {
if (imageFactor > imageViewFactor) {
CGFloat scaledImageWidth = imageViewBounds.size.height * imageFactor;
CGFloat xOffset = (scaledImageWidth - imageViewBounds.size.width) / 2;
imageViewContentsRect.origin.x = -(xOffset / scaledImageWidth);
} else if (imageFactor < imageViewFactor) {
CGFloat scaledImageHeight = imageViewBounds.size.width / imageFactor;
CGFloat yOffset = (scaledImageHeight - imageViewBounds.size.height) / 2;
imageViewContentsRect.origin.y = -(yOffset / scaledImageHeight);
}
} else if (self.alignmentMode == AHTImageAlignmentModeRight) {
if (imageFactor > imageViewFactor) {
CGFloat scaledImageWidth = imageViewBounds.size.height * imageFactor;
CGFloat xOffset = (scaledImageWidth - imageViewBounds.size.width);
imageViewContentsRect.origin.x = (xOffset / scaledImageWidth) / 2;
} else if (imageFactor < imageViewFactor) {
CGFloat scaledImageHeight = imageViewBounds.size.width / imageFactor;
CGFloat yOffset = (scaledImageHeight - imageViewBounds.size.height);
imageViewContentsRect.origin.y = (yOffset / scaledImageHeight) / 2;
}
}
}
self.layer.contentsRect = imageViewContentsRect;
}