2013-02-14 20 views
4

我正在玩UIImageView的contentMode屬性。iOS:如何在使用UIViewContentModeScaleAspectFill時對齊(左/右)UIImageView?

當我將它設置爲UIViewContentModeScaleAspectFill時,圖像將縮放以適合屏幕。 它居中。所以右和左(或上下,取決於屏幕方向)部分圖片被剪切。

我想有相同的行爲,但不居中。是否有可能將圖像僅限制在右側(或左側)? (再次取決於方向的頂部或底部)?

感謝

回答

6

我知道這是自2月份以來一段時間,但我只是遇到了我開發的應用程序同樣需要。

我解決了它使用自定義的UIImageView,它可以很容易地集成到您現有的代碼(它是UIImageView的直接替換)。

您可以在github類,用一個例子沿: https://github.com/reydanro/UIImageViewAligned

希望這有助於你在你的下一個項目

0

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