UIKit视图动画的微扩展
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处.
如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! 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视图动画的微扩展的更多相关文章
- 浅谈Android样式开发之View Animation (视图动画)
引言 一个用户体验良好的App肯定少不了动画效果.Android为我们提供了2种动画框架,分别是视图动画(View Animation)和属性动画(Property Animation).视图动画比较 ...
- Sharepoint 2013列表视图和字段权限扩展插件(免费下载)!
记得2014年春节期间,有博客园的网友通过QQ向我咨询Sharepoint 2013列表视图和字段权限扩展,因为之前他看到我博客介绍Sharepoint 2010列表视图和字段的权限控制扩展使用,问有 ...
- Android Animations 视图动画使用详解!!!
转自:http://www.open-open.com/lib/view/open1335777066015.html Android Animations 视图动画使用详解 一.动画类型 Andro ...
- Android动画(一)-视图动画与帧动画
项目中好久没用过动画了,所以关于动画的知识都忘光了.知识总是不用则忘.正好最近的版本要添加比较炫酷的动画效果,所以也借着这个机会,写博客来整理和总结关于动画的一些知识.也方便自己今后的查阅. Andr ...
- Android-Animation (1) 视图动画
Android-Animation (1) 视图动画 学习自: Keegan小钢 :http://keeganlee.me/post/android/20151003 Carson_Ho : http ...
- Android视图动画集合AndoridViewAnimations
Android视图动画集合AndoridViewAnimations Android视图动画是针对视图对象的动画效果,包括对象平移.旋转.缩放和渐变四种类型.通过组合这四种类型,可以创建出无数种动画效 ...
- Swift实现UIKit Dynamic动画
iOS7引入了UIKit Dynamics,可以帮助开发者开发出更接近真实世界的动画效果.之前,用户如果要做出这样的效果,需要话很多的时间在物理计算和Core Animation上.现在,所有的一切都 ...
- Android 动画基础——视图动画(View Animation)
本篇讲android 3.0之前被广泛的动画框架——ViewAnimation. 目录 我将分为六部分来讲: 概述 Alpha透明动画 Rotate旋转动画 Translate位移动画 Scale放缩 ...
- 知识图谱顶会论文(ACL-2022) CAKE:用于多视图KGC的可扩展常识感知框架
CAKE:用于多视图KGC的可扩展常识感知框架.pdf 论文地址:CAKE:Scalable Commonsense-Aware Framework For Multi-View Knowledge ...
随机推荐
- 初学servlet之form表单
使用doget向页面写表单,使用dopost读取表单内容,包括了单选按钮,复选框,下拉列表等等的读取方法,form的action属性不写,默认表单会被提交给请求他时用的相同的URL package a ...
- ●BZOJ 3963 [WF2011]MachineWorks
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3963 题解: 斜率优化DP,CDQ分治. 先按时间排序.(规定以下内容的第i台机器的卖出时间 ...
- ●BZOJ 2006 NOI 2010 超级钢琴
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=2006 题解: RMQ + 优先队列 (+ 前缀) 记得在一两个月前,一次考试考了这个题目的简 ...
- 2015 多校联赛 ——HDU5349(水)
Problem Description A simple problem Problem Description You have a multiple set,and now there are t ...
- ●BZOJ 3545 [ONTAK2010]Peaks(离线)
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3545 http://www.lydsy.com/JudgeOnline/problem.ph ...
- bzoj1926[Sdoi2010]粟粟的书架 二分 主席树
1926: [Sdoi2010]粟粟的书架 Time Limit: 30 Sec Memory Limit: 552 MBSubmit: 1064 Solved: 421[Submit][Stat ...
- Codeforces Round #407 (Div. 2)
来自FallDream的博客,未经允许,请勿转载,谢谢. ------------------------------------------------------ A.Anastasia and ...
- Servlet init()
有时候希望在servlet首次载入时,执行复杂的初始化任务,但并不想每个请求都重复这些任务的时候,用init()方法他在servlet初次创建时被调用,之后处理每个用户的请求时,则不在调用这个方法.因 ...
- Gradle--初识
1.Eclipse从svn导入Gradle项目 1.检出项目的时候不要选新项目,选"做为工作空间中的项目检出",然后点Finish. 2.将项目转为Gradle项目,右键导入的项目 ...
- 【Java关键字-Interface】为什么Interface中的变量只能是 public static final
三个关键字在接口中的存在原因:public:接口可以被其他接口继承,也可以被类实现,类与接口.接口与接口可能会形成多层级关系,采用public可以满足变量的访问范围: static:如果变量不是sta ...