FlipView With AutoLayout

作者: Raaaaamsey | 来源:发表于2016-07-28 16:38 被阅读50次

    最近项目中需要实现一个类似于硬币翻转的双面View,由于太懒了就在github上找了一个。CMSCoinView

    之后再具体使用的时候发现很是不便,由于原作者是使用frame进行布局的,我的界面又有许多这样的view,导致代码很不优雅,于是就自己用swift写了一个。

    代码实现很简单,思路也很简单,直接看效果图吧。

    FlipView.gif

    实现思路很简单,在代码里都有简单的注释。
    下面几个关键点说一下:

    // 此处可以将primaryView和secondaryView改写为需要的view子类,比如UILabel
        var primaryView = UIImageView()
        var secondaryView = UIImageView()
    
    // 将secondaryView send到back, 设置为hidden
        self.sendSubviewToBack(secondaryView)
        secondaryView.hidden = true
    
    // 使用UIView的 transitionFromView(fromView: UIView, toView: UIView, duration: NSTimeInterval, options: UIViewAnimationOptions, completion: ((Bool) -> Void)?)
    // 来设置动画效果,这里需要注意的是options这里,需要设置为ShowHideTransitionViews,这主要是因为这个方法会操作视图层级,并添加新的目的地视图,如果使用AutoLayout,动画结束后,视图就没有约束了,所以会显示错误。
    UIView.transitionFromView(displayingPrimary ? primaryView : secondaryView,
                                      toView: displayingPrimary ? secondaryView : primaryView,
                                      duration: spinTimeInterval,
                                      options: [.TransitionFlipFromLeft, .ShowHideTransitionViews]) { (finish) in
                                        if finish {
                                            self.displayingPrimary = !self.displayingPrimary
                                            if self.displayingPrimary {
                                                self.secondaryView.hidden = true
                                            } else {
                                                self.secondaryView.hidden = false
                                            }
                                        }
            }
    

    具体使用的时候也很简单,

      let flipView = FlipView()
      self.view.addSubview(flipView)
      flipView.frame = CGRect(x: 125, y: 100, width: 100, height: 100)          
      flipView.primaryView.image = UIImage(named: "surfingCamp")
      flipView.secondaryView.image = UIImage(named: "pokemon2")
      startFlip()
    

    如果使用的时候,可以根据自己项目的需求,修改下FlipView的正反面View,比如可以设置圆角之类的。

    Demo上传到GitHub上了。----> FlipView

    相关文章

      网友评论

        本文标题:FlipView With AutoLayout

        本文链接:https://www.haomeiwen.com/subject/tvpajttx.html