UIKit视图动画的微扩展
2016-05-28 18:12
411 查看
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处.
如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! 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件事:
包含随机返回8个Transition选项之一的属性
返回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,效果如下:
相关文章推荐
- UIKit视图动画的微扩展
- UIKit视图动画的微扩展
- 循环队列(Circular Queue)
- deque容器
- iOS中UITextField使用详解
- HDU-5297-Y sequence(容斥+迭代)
- 2016 UESTC Training Search Algorithm and StringB - Xiper的奇妙历险(2)(三维迷宫)
- (Leetcode 95+96)Unique Binary Search Trees 动态规划 分治
- HDU 4010 Query on The Trees(动态树)
- 对Map按key和value分别排序
- [leetcode]347. Top K Frequent Elements
- It is indirectly referenced from required .class files
- UIButtonAndNSTimer
- ora-00054:resource busy and acquire with nowait specified
- Hibernate中的query.setFirstResult(),query.setMaxResults();
- ORA-00054: resource busy and acquire with NOWAIT specified
- UML建模之时序图(Sequence Diagram)
- hdu 3397 Sequence operation(线段树区间覆盖,区间合并)
- UIWindow UIView UILable UIButton
- BearSkill实用方法之UITextField限制输入的字符数量