2016-04-12 16 views
4

'Aspect Fit' modunu imageview kullanıyorum. Gerçek görüntü oranını iyi koruyor. Sorun, çalışma zamanında gerçek görüntü genişliğini/yüksekliğini alamam.iOS | Hızlı görüntü yönetimindeki tam ekranda runtime image width/height nasıl elde edilir

imageview.frame.size.width'u kullandığımda, tam ekran genişliğini beklendiği gibi döndürüyor. image.size.width kullandığımda, sabit görüntü genişliğini (gerçek görüntü genişliği) döndürüyor. Ama amacım, kullanıcı arayüzünde gösterilen çalışma zamanı genişliğini elde etmektir.

Kaynaktan nasıl bulunur. ortada etiketle orta enter image description here

Güncel yatay ekran etiket ile

DÜZENLEME 1

Güncel portre ekranı. Etiket genişliği imageview ile aynıdır, ancak görüntü genişliği şu anda görüntülenmiyor.

enter image description here

+0

Gerçek 'UIImage' nesnesi yeniden boyutlandırılmaz. Yeniden boyutlandırmak isterseniz, bir resme, görünüm sığdırma veya görünüm doluluğu temel alınarak yeniden boyutlandırmanız gerektiğini gösteren çok sayıda örnek vardır (yığın Oveflow üzerinde bir miktar da dahil olmak üzere). – nhgrif

+0

@nhgrif Gereksinimi anladınız mı? Eğer bir çözümünüz varsa daha iyi bir cevabınız varsa veya kesin bağlantılara başvurunuz. –

+0

Evet. Gerçek "UIImage" nesnesi, nasıl görüntülendiğine bakılmaksızın yeniden boyutlandırılmaz. Bunu işaret ediyorum, çünkü bu bilgilerle ne yaptığınıza bağlı olarak bilmek çok önemli olabilir. Önemli olarak, altta yatan 'UIImage' nesnesini (farklı bir soru) yeniden boyutlandırmak istemediğiniz sürece, ekran boyutunu nasıl bulmanın değerli olduğunu anlamıyorum. – nhgrif

cevap

1

Aşağıdaki kodu deneyin. IPhone 6S cihazı için gereksiniminize göre mükemmel çalışır. Cihaz ekran yönü yatay modda değiştiğinde, etiket çerçevesinin x konumunu ve genişliğini hesaplıyorum. 5S ve 4S gibi diğer cihazlar için, cihazın yükseklik genişlik oranına göre x konumunu ve genişliğini hesaplamanız gerekir. Örneğin, 9 ve 18 gibi sabit bir değer kullandım. Kodunuzu farklı cihazlar için kullanmak istiyorsanız, oran faktörünü kullanmanız gerekir. Umarım bu yardım!

import UIKit 

class ViewController: UIViewController { 

@IBOutlet weak var theImageView: UIImageView! 
@IBOutlet weak var theLabel: UILabel! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
    theLabel.frame.size.width = (theImageView.image?.size.width)! 

    NSNotificationCenter.defaultCenter().addObserver(self, selector: "rotated", name: UIDeviceOrientationDidChangeNotification, object: nil) 
} 

override func viewDidAppear(animated: Bool) { 

    if(UIDeviceOrientationIsLandscape(UIDevice.currentDevice().orientation)) 
    { 
     if (theImageView.image?.size.height)! > (theImageView.image?.size.width)! { 
      theLabel.frame.origin.x = (view.frame.size.width - (theImageView.image?.size.height)!)/2 
      theLabel.frame.size.width = (theImageView.image?.size.height)! 
     } 
     else { 
      theLabel.frame.origin.x = ((theImageView.image?.size.height)!/2) - 9 
      theLabel.frame.size.width = rint(view.frame.size.width) - (theImageView.image?.size.height)! + 18 
     } 
    } 

    if(UIDeviceOrientationIsPortrait(UIDevice.currentDevice().orientation)) 
    { 
     theLabel.frame.size.width = theImageView.frame.size.width 
    } 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) { 
    //theImageView.frame.size.width = (theImageView.image?.size.width)! 
    //theImageView.frame.size.height = (theImageView.image?.size.height)! 
} 

func rotated() 
{ 
    if(UIDeviceOrientationIsLandscape(UIDevice.currentDevice().orientation)) 
    { 
     if (theImageView.image?.size.height)! > (theImageView.image?.size.width)! { 
      theLabel.frame.origin.x = (view.frame.size.width - (theImageView.image?.size.height)!)/2 
      theLabel.frame.size.width = (theImageView.image?.size.height)! 
     } 
     else { 
      theLabel.frame.origin.x = ((theImageView.image?.size.height)!/2) - 9 
      theLabel.frame.size.width = rint(view.frame.size.width) - (theImageView.image?.size.height)! + 18 
     } 
    } 

    if(UIDeviceOrientationIsPortrait(UIDevice.currentDevice().orientation)) 
    { 
     theLabel.frame.size.width = theImageView.frame.size.width 
    } 


} 
İlgili konular