iOS:如何在使用UIViewContentModeScaleAspectFill时将UIImageView对齐到左侧或右侧?

5
我正在调整UIImageView的contentMode属性。当我将其设置为UIViewContentModeScaleAspectFill时,图像会被缩放以适应屏幕并居中显示,因此图片的左右(或上下,取决于屏幕方向)部分会被裁剪。我希望它仍然裁剪图像边缘,但不要居中显示。是否有可能只在右侧(或左侧)裁剪图像?(取决于方向是上或下)。谢谢。
2个回答

7

我知道离二月已经有一段时间了,但是我在开发的应用程序中遇到了同样的需求。

我使用了一个自定义的UIImageView来解决这个问题,它可以很容易地集成到您现有的代码中(它是UIImageView的替代品)。

您可以在github上找到这个类,以及一个示例: https://github.com/reydanro/UIImageViewAligned

希望这能帮助您在下一个项目中使用。


1
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;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接