2017-08-07 7 views
1

私のアプリケーションでは、画像をタップして画像を拡大して画像をフルサイズで表示しています。異なる画像タイプに基づいて正しい画像の高さを取得する問題

理想的には、これは私が作業を取得したいものです。 (私はここにビデオを追加できませんでしたので、ここではそれへのリンクがあります) https://media.giphy.com/media/F7wCO7miVMG6k/source.mp4

はしかし、私は上の画像を表示することができますよ彼らの身長がそれほど高くないなら、正しいサイズ。 Short height Short height full screen

私は、正方形のイメージを持っているか、それは次のように画像が大きすぎ、画像が表示される場合:

square image square image full

ここでは画像の表示方法を処理するコードです

var startingFrame: CGRect? 
var blackBackgroundView: UIView? 
var startingImageView: UIImageView? 

func performZoomInForStartingImageView(startingImageView: UIImageView){ 
    print("starting image view: ", startingImageView.bounds) 
    //startingImageView.sizeToFit() 

    self.startingImageView = startingImageView 
    self.startingImageView?.isHidden = true 

    startingFrame = startingImageView.superview?.convert(startingImageView.frame, to: nil) 
    print("starting frame: ", startingFrame!) 

    let zoomingImageView = UIImageView(frame: startingFrame!) 
    //zoomingImageView.backgroundColor = UIColor.red 
    zoomingImageView.image = startingImageView.image 
    print("zoom image view: ", zoomingImageView.bounds) 
    zoomingImageView.isUserInteractionEnabled = true 
    //zoomingImageView.autoresizingMask = [.flexibleWidth, .flexibleHeight, .flexibleBottomMargin, .flexibleRightMargin, .flexibleLeftMargin, .flexibleTopMargin] 
    //zoomingImageView.contentMode = UIViewContentMode.scaleAspectFit 
    zoomingImageView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleZoomOut))) 

    if let keyWindow = UIApplication.shared.keyWindow { 

     print("key window frame: ", keyWindow.frame) 

     blackBackgroundView = UIView(frame: keyWindow.frame) 
     blackBackgroundView?.backgroundColor = UIColor.black 
     blackBackgroundView?.alpha = 0 
     keyWindow.addSubview(blackBackgroundView!) 
     keyWindow.addSubview(zoomingImageView) 


     UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEaseOut, animations: { 

      self.blackBackgroundView?.alpha = 1 

      print("keywindow frame width: ", keyWindow.frame.width) 
      print("keywindow frame height: ", keyWindow.frame.height) 
      print("\nstarting frame height: ", self.startingFrame!.height) 
      print("starting frame width: ", self.startingFrame!.width) 

      let height = (self.startingFrame!.height/self.startingFrame!.width) * keyWindow.frame.width 
      print("height in animate:", height) 
      //let height = self.startingFrame!.height * 2 

      zoomingImageView.frame = CGRect(x: 0, y: 0, width: keyWindow.frame.width, height: height) 
      print("zooming image view frame: ", zoomingImageView.frame) 

      zoomingImageView.center = keyWindow.center 

     }, completion: nil) 

    } 
} 

注:フレームで何が起こっていたかを正確に確認するために、一連の印刷文を追加しました。

私も自分の問題は、次の行で起こることに気づい:それは正しく、短い高さで画像が表示されますが、他の写真の高さが正しくないkeyWindow.frame.widthを使用することにより

let height = (self.startingFrame!.height/self.startingFrame!.width) * keyWindow.frame.width 

私は行を変更した場合:

let height = (self.startingFrame!.height/self.startingFrame!.width) * keyWindow.frame.height 

それは正しく正方形の画像を表示しますが、短い高さのないもの。

画像の高さを正確に検出し、高さに基づいて正しく表示するにはどうすればよいですか?

編集: スクエアイメージログ Square image log

ワイド画像ログ Wide image log

編集2:新しいログ

スクエアイメージログ Square image

ワイド画像ログ Wide image

答えて

1
あなたが画像を確認する if条件を追加するように試みることができる

は、風景やポートレートとそれに応じて設定高さで、

let image = startingImageView.image 
let w = image.size.width 
let h = image.size.height 
print("image width: ", w) 
print("image height: ", h) 
var height = 0 
if (w > h) { //landscape 
    height = (self.startingFrame!.height/self.startingFrame!.width) * keyWindow.frame.width 
} else { //portrait 
    height = (self.startingFrame!.height/self.startingFrame!.width) * keyWindow.frame.height 
} 
+0

感謝コメントのために。アプリケーションはポートレートのみですが、画像は高さに基づいて正しく表示されません。 –

+0

上記のように幅と高さの比率をチェックしてみましたか? – Akhilrajtr

+0

はい私は上記のコードを試しましたが、画像はまだ間違って表示されています –

関連する問題