ios - 卡片翻转图像不受 View 限制

标签 ios swift xcode

我有以下 View Controller

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
}

}

它基本上由一个 View 组成,该 View 在其中加载图像,以及当点击的卡片与另一张图像翻转时。

我的问题是图像没有限制在 View 中,而是显示在 viewController 的左上角。

如何让卡片停留在inner view的范围内?

谢谢

最佳答案

你很接近,但你需要给你的 ImageView 一个框架或约束。

由于您正在使用 .scaleToFill,最简单的方法是禁用 AutoresizingMask,并简单地设置 Frame 以匹配容器 View :

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
    }

}

关于ios - 卡片翻转图像不受 View 限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47094608/

相关文章:

ios - RLM 异常 : 'Primary key property ' serial' does not exist on object 'Book' Migrating to Swift 4

objective-c - ios编程-格式字符串未使用数据参数

iOS 8 - 如何注册要包含在系统共享菜单中的应用程序?

ios - NSAutoreleasePool 和 @autoreleasepool block 有什么区别?

iOS 10.3 : NSStrikethroughStyleAttributeName is not rendered if applied to a sub range of NSMutableAttributedString

ios - 我怎样才能摆脱 "Update to recommended settings"警告?

xcode - 未找到 TwitterKit/TwitterKit.h

ios - 当我将它设置为每封电子邮件一个时,Firebase 创建多个帐户

ios - Whatsapp 类型编辑按钮 IOS master detail app

ios - 如何使 UIViews 以淡入方式过渡到可见状态?