大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处.

如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! 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,效果如下:

UIKit视图动画的微扩展的更多相关文章

  1. 浅谈Android样式开发之View Animation (视图动画)

    引言 一个用户体验良好的App肯定少不了动画效果.Android为我们提供了2种动画框架,分别是视图动画(View Animation)和属性动画(Property Animation).视图动画比较 ...

  2. Sharepoint 2013列表视图和字段权限扩展插件(免费下载)!

    记得2014年春节期间,有博客园的网友通过QQ向我咨询Sharepoint 2013列表视图和字段权限扩展,因为之前他看到我博客介绍Sharepoint 2010列表视图和字段的权限控制扩展使用,问有 ...

  3. Android Animations 视图动画使用详解!!!

    转自:http://www.open-open.com/lib/view/open1335777066015.html Android Animations 视图动画使用详解 一.动画类型 Andro ...

  4. Android动画(一)-视图动画与帧动画

    项目中好久没用过动画了,所以关于动画的知识都忘光了.知识总是不用则忘.正好最近的版本要添加比较炫酷的动画效果,所以也借着这个机会,写博客来整理和总结关于动画的一些知识.也方便自己今后的查阅. Andr ...

  5. Android-Animation (1) 视图动画

    Android-Animation (1) 视图动画 学习自: Keegan小钢 :http://keeganlee.me/post/android/20151003 Carson_Ho : http ...

  6. Android视图动画集合AndoridViewAnimations

    Android视图动画集合AndoridViewAnimations Android视图动画是针对视图对象的动画效果,包括对象平移.旋转.缩放和渐变四种类型.通过组合这四种类型,可以创建出无数种动画效 ...

  7. Swift实现UIKit Dynamic动画

    iOS7引入了UIKit Dynamics,可以帮助开发者开发出更接近真实世界的动画效果.之前,用户如果要做出这样的效果,需要话很多的时间在物理计算和Core Animation上.现在,所有的一切都 ...

  8. Android 动画基础——视图动画(View Animation)

    本篇讲android 3.0之前被广泛的动画框架——ViewAnimation. 目录 我将分为六部分来讲: 概述 Alpha透明动画 Rotate旋转动画 Translate位移动画 Scale放缩 ...

  9. 知识图谱顶会论文(ACL-2022) CAKE:用于多视图KGC的可扩展常识感知框架

    CAKE:用于多视图KGC的可扩展常识感知框架.pdf 论文地址:CAKE:Scalable Commonsense-Aware Framework For Multi-View Knowledge ...

随机推荐

  1. pyqt4 写动画不能播放问题集合

    最近在学习动画,真的真的是血泪史,百度基本是0资源,各种在谷歌外国大佬的英文中躺过一个一个血坑....... 这是随便写的一个动画功能调试窗口..... 问题现象: 点击食灵,没反应,写的动画不能生成 ...

  2. 简陋的个人Vim使用命令

    最近把Visual Studio 的编辑器改成了 Vim,感觉像发现了新世界,记录记录一些提高效率的Vim命令. 插入命令 i 在当前位置前插入 I 在当前行首插入 a 在当前位置后插入 A 在当前行 ...

  3. [AtCoder arc090E]Avoiding Collision

    Description 题库链接 给出一张 \(N\) 个节点, \(M\) 条边的无向图,给出起点 \(S\) 和终点 \(T\) .询问两个人分别从 \(S\) 和 \(T\) 出发,走最短路不相 ...

  4. 51nod 1376 最长递增子序列的数量(线段树)

    51nod 1376 最长递增子序列的数量 数组A包含N个整数(可能包含相同的值).设S为A的子序列且S中的元素是递增的,则S为A的递增子序列.如果S的长度是所有递增子序列中最长的,则称S为A的最长递 ...

  5. 51nod 1179 最大的最大公约数

    1179 最大的最大公约数 题目来源: SGU 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 给出N个正整数,找出N个数两两之间最大公约数的最大值.例如:N = ...

  6. hdu 1255 覆盖的面积(求覆盖至少两次以上的面积)

    了校赛,还有什么途径可以申请加入ACM校队?  覆盖的面积 Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K ...

  7. Django+nginx+uwsgi部署教程(centos7+ubuntu16.4)

    在线教育平台项目演示地址 项目部署教程 1.1.工作原理介绍 django 一个基于python的开源web框架 uwsgi 一是一个web服务器,也可以当做中间件 nginx 常用高性能代理服务器 ...

  8. Spring源码分析(一)--BeanProcessor

    一.何谓BeanProcessor BeanProcessor是SpringFramework里非常重要的核心接口之一,我先贴出一段源代码: /* * Copyright 2002-2015 the ...

  9. C语言第二次作业 ,

    一:修改错题 1输出带框文字:在屏幕上输出以下3行信息. 将源代码输入编译器 运行程序发现错误 错误信息1: 错误原因:将stido.h拼写错误 改正方法:将stido.h改为stdio.h 错误信息 ...

  10. Mysql--存储引擎(MyISam & InnoDB)

    Mysql 系列文章主页 =============== 查看 Mysql 支持的存储引擎: show engines; 查看当前数据库使用的存储引擎: show variables like '%s ...