2011-07-17 46 views
8

如何獲得UIImageView誰的模式是AspectFit的比例因子?我怎樣才能得到UIImageView誰的模式是AspectFit的比例因子?

也就是說,我有一個模式爲AspectFit的UIImageView。圖像(方形)縮放到我的UIImageView框架,這很好。

如果我想獲得使用的比例量(例如0.78或其他),我怎樣才能直接得到這個?

我不想比較父視圖寬度與UIImageView寬度,因爲計算必須考慮方向,注意我將方形圖像縮放爲矩形視圖。因此,我爲什麼直接查詢UIImageView來查找。

編輯:我需要它爲iPhone或iPad部署以及。

+0

我最後計算整個我需要的東西,而不是與aspectFit內容模式使用UIImageView。很方便,並且丟失了許多詳細信息。 – AechoLiu

回答

16

我寫一個UIImageView類別爲:

的UIImageView + ContentScale.h

#import <Foundation/Foundation.h> 

@interface UIImageView (UIImageView_ContentScale) 

-(CGFloat)contentScaleFactor; 

@end 

的UIImageView + ContentScale.m

#import "UIImageView+ContentScale.h" 

@implementation UIImageView (UIImageView_ContentScale) 

-(CGFloat)contentScaleFactor 
{ 
    CGFloat widthScale = self.bounds.size.width/self.image.size.width; 
    CGFloat heightScale = self.bounds.size.height/self.image.size.height; 

    if (self.contentMode == UIViewContentModeScaleToFill) { 
     return (widthScale==heightScale) ? widthScale : NAN; 
    } 
    if (self.contentMode == UIViewContentModeScaleAspectFit) { 
     return MIN(widthScale, heightScale); 
    } 
    if (self.contentMode == UIViewContentModeScaleAspectFill) { 
     return MAX(widthScale, heightScale); 
    } 
    return 1.0; 

} 

@end 
+0

謝謝 - btw re「widthScale =」行,所以應該使用「self.bounds.size .width「而不是」self.frame.size.width「呢? – Greg

+1

@greg在大多數情況下沒有任何區別。我在這裏使用邊界是因爲它關於視圖本身的大小。邊界指定視圖可以將其內容相對於其自身繪製的位置,框架指定相對於其超視圖的位置。 – Felix

+0

應該修零除零情況 – storoj

1

那麼你可以做類似

CGFloat widthScale = imageView.image.size.width/imageView.frame.size.width; 
CGFloat heightScale = imageView.image.size.height/imageView.frame.size.height; 

讓我知道這是否爲你的作品。

+0

謝謝,但我只是在整體比例因子(注意這是一個方面適合),我不想檢測方向,以查看方面適合是否會首先停止在寬度或高度(如果你知道我的意思) - 正在搜索,看看是否有辦法獲得的價值沒有看幀尺寸和檢測方向.. – Greg