2011-07-17 9 views
8

UIImageView kipinin Aspect faktörü olan ölçek faktörünü nasıl alabilirim?UIImageView kipinin AspectFit'in kipini nasıl alabilirim?

Bu, AspectFit modlu bir UIImageView'im var. Görüntü (kare), iyi olan UIImageView çerçevem ​​için ölçeklendirildi.

Kullanılan ölçek miktarını almak istersek (ör. 0,78 veya herhangi bir şey) bunu doğrudan nasıl alabilirim?

Sayısal bir görünüme kare bir görüntüyü ölçeklendirdiğimi belirterek, hesaplamanın yönlendirmeyi dikkate alması gerektiğinden, UIImageView genişliğinin üst görünüm genişliğini karşılaştırmak zorunda kalmak istemiyorum. Bu yüzden neden bulmak için UIImageView sorgulamak için doğrudan bir yol vardı.

DÜZENLEME: iPhone veya iPad dağıtımı için de çalışması gerekiyor.

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

gibi

+0

Sonunda bütün hesaplamak aspectFit içerik modu ile UIImageView kullanmak yerine ihtiyacım olan şeyler. Bu uygun ve birçok detay bilgilerin kaybolmasıdır. – AechoLiu

cevap

16

bunun için bir UIImageView kategorisini yazdık:

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

teşekkürler - btw re "widthScale =" line, yani "self.bounds.size kullanmalı .width "ve değil" self.frame.size.width "o zaman? Çoğu durumda fark etmez – Greg

+1

@ greg. Burada sınırlar kullandım çünkü görünüşün kendisi hakkında. Sınırlar, görüntünün kendisine göre içeriği nerede oluşturabileceğini belirtir; çerçeve, süper görünümüne göre konumu belirtir. – Felix

+0

, bölümü sıfır duruma göre düzeltmelidir – storoj

1

Eh Yapabileceğin bir şey sizin için çalıştığını bana bildirin.

+0

teşekkürler, ancak genel ölçek faktörünün (bir görünüm uyumu olduğunu belirterek) peşindeydim ve yönün uygunluğunun önce bir genişlik veya yüksekliğe göre durup durmayacağını görmek için yönelimi saptamak istemedim (eğer ne demek istediğimi biliyorum - çerçeve boyutlarına bakmadan ve yönelimi tespit etmeden değeri elde etmek için bir yol olup olmadığını araştırıyordu .. – Greg