我正在玩UIImageView的contentMode屬性。iOS:如何在使用UIViewContentModeScaleAspectFill時對齊(左/右)UIImageView?
當我將它設置爲UIViewContentModeScaleAspectFill時,圖像將縮放以適合屏幕。 它居中。所以右和左(或上下,取決於屏幕方向)部分圖片被剪切。
我想有相同的行爲,但不居中。是否有可能將圖像僅限制在右側(或左側)? (再次取決於方向的頂部或底部)?
感謝
我正在玩UIImageView的contentMode屬性。iOS:如何在使用UIViewContentModeScaleAspectFill時對齊(左/右)UIImageView?
當我將它設置爲UIViewContentModeScaleAspectFill時,圖像將縮放以適合屏幕。 它居中。所以右和左(或上下,取決於屏幕方向)部分圖片被剪切。
我想有相同的行爲,但不居中。是否有可能將圖像僅限制在右側(或左側)? (再次取決於方向的頂部或底部)?
感謝
我知道這是自2月份以來一段時間,但我只是遇到了我開發的應用程序同樣需要。
我解決了它使用自定義的UIImageView,它可以很容易地集成到您現有的代碼(它是UIImageView的直接替換)。
您可以在github類,用一個例子沿: https://github.com/reydanro/UIImageViewAligned
希望這有助於你在你的下一個項目
iOS的方式做,這是操作層的contentsRect UIImageView。考慮以下示例(在我的自定義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;
}