簡體   English   中英

如何翻轉單個UIView?

[英]How do you flip an single UIView around?

我正在嘗試制作類似於棋盤游戲內存的基於圖塊的游戲。 我希望UiViews的圖塊在按下時翻轉以顯示圖片。 是否有可能做到這一點? 我一直在尋找,但似乎所有人都展示了視圖之間過渡的方法。

您可以使用此類在水龍頭上進行類似動畫的翻轉。

class FlippingView : UIView
{
    var frontView : UIImageView!
    var backView : UIImageView!
    var isAnimating : Bool = false

    override init(frame: CGRect) {
        super.init(frame: frame)
        frontView = UIImageView(frame: CGRectMake(0, 0, frame.size.width, frame.size.height))
        backView = UIImageView(frame: frontView.frame)
        self.addSubview(frontView)
        self.addSubview(backView)
        self.backView.hidden = true

        let tapRecognizer = UITapGestureRecognizer(target: self, action: "flip")
        self.addGestureRecognizer(tapRecognizer)
    }

    required init(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    func flip()
    {
        if isAnimating {
            return
        }
        isAnimating = true
        if (backView.hidden)
        {
            frontView.layer.transform = CATransform3DMakeRotation(0, 0, 0, 0)
            self.backView.layer.transform = CATransform3DMakeRotation(3.14/2, 0, 1, 0)
            self.backView.hidden = false
            UIView.animateKeyframesWithDuration(2, delay: 0, options: nil, animations: {

                UIView.addKeyframeWithRelativeStartTime(0, relativeDuration: 0.5, animations: {
                     self.frontView.layer.transform = CATransform3DMakeRotation(3.14/2, 0, 1, 0)
                })

                UIView.addKeyframeWithRelativeStartTime(0.5, relativeDuration: 0.5, animations: {
                    self.backView.layer.transform = CATransform3DMakeRotation(3.14, 0, 1, 0)
                })
                }, completion: { (finished) -> Void in
                    self.isAnimating = false
                    self.frontView.hidden = true
            })
        }
        else
        {
            backView.layer.transform = CATransform3DMakeRotation(3.14, 0, 1, 0)
            self.frontView.layer.transform = CATransform3DMakeRotation(3.14/2, 0, 1, 0)
            self.frontView.hidden = false
            UIView.animateKeyframesWithDuration(2, delay: 0, options: nil, animations: {

                UIView.addKeyframeWithRelativeStartTime(0, relativeDuration: 0.5, animations: {
                    self.backView.layer.transform = CATransform3DMakeRotation(-3.14/2, 0, 1, 0)
                })

                UIView.addKeyframeWithRelativeStartTime(0.5, relativeDuration: 0.5, animations: {
                    self.frontView.layer.transform = CATransform3DMakeRotation(0, 0, 1, 0)
                })
                }, completion: { (finished) -> Void in
                    self.isAnimating = false
                    self.backView.hidden = true
            })
        }
    }
}

你可以這樣使用

override func viewDidLoad() {

    flippingView = FlippingView(frame: CGRectMake(100, 100, 100, 100))
    flippingView.frontView.image = UIImage(named: "1.png")
    flippingView.backView.image = UIImage(named: "2.png")
    self.view.addSubview(flippingView)
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM