您当前的位置: 首页 >  动画

UIKit视图动画的微扩展

发布时间:2016-05-28 18:12:11 ,浏览量:0

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;)

好久没写blog了,还不快快写来… ;]

我们知道在UIKit中做动画有几种方法,一种是Animation,还有就是Transition,前者根据对象的属性产生动画,后者则是通过View之间的操作完成动画.

我们可以看一下UIViewAnimationOptions这个类,其中与Transition相关的共有8种选项:

public static var TransitionNone: UIViewAnimationOptions { get } // default public static var TransitionFlipFromLeft: UIViewAnimationOptions { get } public static var TransitionFlipFromRight: UIViewAnimationOptions { get } public static var TransitionCurlUp: UIViewAnimationOptions { get } public static var TransitionCurlDown: UIViewAnimationOptions { get } public static var TransitionCrossDissolve: UIViewAnimationOptions { get } public static var TransitionFlipFromTop: UIViewAnimationOptions { get } public static var TransitionFlipFromBottom: UIViewAnimationOptions { get }

下面我们UIViewAnimationOptions结构写一个扩展,这个扩展做2件事:

  1. 包含随机返回8个Transition选项之一的属性
  2. 返回Transition选项对应的名称
import Foundation import UIKit import GameplayKit @available(iOS 9.0, *)
private let randomGen:GKShuffledDistribution = GKShuffledDistribution(forDieWithSideCount: UIViewAnimationOptions.allDirectionOptions.count) @available(iOS 4.0, *) extension UIViewAnimationOptions{
    static let allDirectionOptions:[UIViewAnimationOptions] = [.TransitionNone,.TransitionFlipFromLeft,.TransitionFlipFromRight,.TransitionCurlUp,.TransitionCurlDown,.TransitionCrossDissolve,.TransitionFlipFromTop,.TransitionFlipFromBottom] var optionName:String{ switch self.rawValue { case UIViewAnimationOptions.TransitionNone.rawValue: return "TransitionNone" case UIViewAnimationOptions.TransitionFlipFromBottom.rawValue: return "TransitionFlipFromBottom" case UIViewAnimationOptions.TransitionFlipFromTop.rawValue: return "TransitionFlipFromTop" case UIViewAnimationOptions.TransitionCrossDissolve.rawValue: return "TransitionCrossDissolve" case UIViewAnimationOptions.TransitionCurlDown.rawValue: return "TransitionCurlDown" case UIViewAnimationOptions.TransitionCurlUp.rawValue: return "TransitionCurlUp" case UIViewAnimationOptions.TransitionFlipFromRight.rawValue: return "TransitionFlipFromRight" case UIViewAnimationOptions.TransitionFlipFromLeft.rawValue: return "TransitionFlipFromLeft" default: return "noneName" }
    }
    /* @available(iOS 9.0, *)
    private lazy var randomGen:GKShuffledDistribution = { return GKShuffledDistribution(forDieWithSideCount: allDirectionOptions.count)
    }()
    */
    static var RandomDirectionOption:UIViewAnimationOptions { if #available(iOS 9.0, *) { let idx = randomGen.nextInt() - 1 print("gen is \(randomGen) , idx is \(idx)") return allDirectionOptions[idx]
        } else { return .TransitionNone
        }
    }
}

首先我们在文件范围建立一个随机数发生器,我们没有使用一般的方法,而是使用了iOS9之后才有的新方法,该随机数发生器,正如其名字那样返回的随机数不会重复,除非选完全部可选的随机数.为什么不放到结构扩展里呢?因为我不希望每次读取RandomDirectionOption属性都生成一个新的随机数发生器.

我们在实际的例子中测试一下上面的扩展:

let option = UIViewAnimationOptions.RandomDirectionOption UIView.transitionWithView(status, duration: 0.33, options: [.CurveEaseOut,option], animations: {
                self.status.hidden = false
                self.label.text = option.optionName self.transitionName.text = option.optionName self.transitionName.sizeToFit()
                self.transitionName.center = CGPoint(x: self.statusPosition.x, y: self.transitionName.center.y)
            }, completion: {_ in delay(seconds: 2.0){
                    if index < self.messages.count - 1{
                        self.removeMessage(index: index)
                    }else{
                        //reset form
                    }
                }
            })

编译链接app,效果如下:

这里写图片描述

关注
打赏
1688896170
查看更多评论

暂无认证

  • 0浏览

    0关注

    108697博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.2755s