2017-11-03 8 views
1

内に拘束されていない私は、基本的には、画像内にロードし、タップカードは別の画像を反転さを得る観点から成り、以下のViewControllerカードフリップ画像は、ビュー

import UIKit 

class CardViewController: UIViewController { 

@IBOutlet weak var containerView: UIView! 

private let backImageView: UIImageView! = UIImageView(image: UIImage(named: "card_front_01")) 
private let frontImageView: UIImageView! = UIImageView(image: UIImage(named: "card_back_01")) 

private var showingBack = false 

override func viewDidLoad() { 
    super.viewDidLoad() 

    frontImageView.contentMode = .scaleToFill 
    backImageView.contentMode = .scaleToFill 

    containerView.addSubview(frontImageView) 
    frontImageView.translatesAutoresizingMaskIntoConstraints = false 


    let singleTap = UITapGestureRecognizer(target: self, action: #selector(flip)) 
    singleTap.numberOfTapsRequired = 1 
    containerView.addGestureRecognizer(singleTap) 
} 

func flip() { 
    let toView = showingBack ? frontImageView : backImageView 
    let fromView = showingBack ? backImageView : frontImageView 
    UIView.transition(from: fromView!, to: toView!, duration: 1, options: .transitionFlipFromRight, completion: nil) 
    toView?.translatesAutoresizingMaskIntoConstraints = false 
    showingBack = !showingBack 
} 

} 

を持っています。

私の問題は、画像がビューに拘束されず、viewControllerの左上に配置されているように見えるということです。

カードを内部ビューのスコープ内に収めるにはどうすればよいですか?

おかげ

答えて

1

あなたは近いですが、あなたはあなたのイメージビューにフレームや制約のいずれかを与える必要があります。

あなたが.scaleToFillを使用しているので、最も簡単な方法は、ないAutoresizingMaskを無効にし、単にコンテナビューに一致するようにフレームを設定します。

class CardViewController: UIViewController { 

    @IBOutlet weak var containerView: UIView! 

    private let backImageView: UIImageView! = UIImageView(image: UIImage(named: "card_front_01")) 
    private let frontImageView: UIImageView! = UIImageView(image: UIImage(named: "card_back_01")) 

    private var showingBack = false 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     frontImageView.contentMode = .scaleToFill 
     backImageView.contentMode = .scaleToFill 

     containerView.addSubview(frontImageView) 

     // don't disable Autoresizing 
     // frontImageView.translatesAutoresizingMaskIntoConstraints = false 

     let singleTap = UITapGestureRecognizer(target: self, action: #selector(flip)) 
     singleTap.numberOfTapsRequired = 1 
     containerView.addGestureRecognizer(singleTap) 

    } 

    override func viewDidLayoutSubviews() { 
     super.viewDidLayoutSubviews() 

     // set the frames of the image views to match the containerView 
     frontImageView.frame = containerView.bounds 
     backImageView.frame = containerView.bounds 

    } 

    func flip() { 
     let toView = showingBack ? frontImageView : backImageView 
     let fromView = showingBack ? backImageView : frontImageView 
     UIView.transition(from: fromView!, to: toView!, duration: 1, options: .transitionFlipFromRight, completion: nil) 
     // don't disable Autoresizing 
     // toView?.translatesAutoresizingMaskIntoConstraints = false 
     showingBack = !showingBack 
    } 

} 
1

あなたが制約(NSLayoutConstraint)またはセットを生成する必要がありますサブビューのフレームを手動で作成します。

最初のイメージを設定し、サブビューとして追加:

imageView.image = image 
containerView.addSubview(imageView) 

その後:

OPTION 1:それはスーパーのCOORD」システム

年代に 'ImageViewの' の枠を設定するここでは一般的な例であります
imageView.translatesAutoresizingMaskIntoConstraints = true // Must be true to use the frame   
imageView.frame = CGRect(x: 50, y: 50, width: image.size.width, height: image.size.height) 

OPTION 2:セットスーパー

トランスのITにおける 'ImageViewの' の制約ladesAutoresizingMaskIntoConstraints制約を使用するにはビューの小道具が真でなければなりません

imageView.translatesAutoresizingMaskIntoConstraints = true 
関連する問題