专栏首页韦弦的偶尔分享Swift 视图抖动扩展二

Swift 视图抖动扩展二

嗯。。。UIView 的 animation 方法里面的 options 还有个.repate,是的,就是动画重复,所以我们可以不用去自己算重复的动画次数。。so,使用这个扩展也是可以的

//
//  UIView+ZHYShake.swift
//  UIViewShake
//
//  Created by ZHY on 2017/8/16.
//  Copyright © 2017年 ZHY. All rights reserved.
//

import UIKit

/// 抖动方向
///
/// - horizontal: 水平抖动
/// - vertical:   垂直抖动
public enum ZHYShakeDirection: Int {
    case horizontal
    case vertical
}
extension UIView {
/// ZHY 扩展UIView增加抖动方法
    ///
    /// - Parameters:
    ///   - direction:  抖动方向    默认水平方向
    ///   - times:      抖动次数    默认5次
    ///   - interval:   每次抖动时间 默认0.1秒
    ///   - offset:     抖动的偏移量 默认2个点
    ///   - completion: 抖动结束回调
    public func shake2(direction: ZHYShakeDirection = .horizontal, times: Int = 5, interval: TimeInterval = 0.1, offset: CGFloat = 2, completion: (() -> Void)? = nil) {
        
        //设置一下重复动画平移的两个变换
        var firstTransform: CGAffineTransform? = nil
        var lastTransform:  CGAffineTransform? = nil
    
        //判断下方向
        switch direction {
        case .horizontal:
            firstTransform = CGAffineTransform(translationX: offset, y: 0)
            lastTransform  = CGAffineTransform(translationX: -offset, y: 0)
            
        case .vertical:
            firstTransform = CGAffineTransform(translationX: 0, y: offset)
            lastTransform  = CGAffineTransform(translationX: 0, y: -offset)
        }
        
        //这是开始的变换
        self.transform = firstTransform!

        //options: [.repeat, .autoreverse] 表示重复加动画回路
        UIView.animate(withDuration: interval, delay: 0, options: [.repeat, .autoreverse], animations: {
            //重复次数就是我们的times呗
            UIView.setAnimationRepeatCount(Float(times))
          
          //  开始变换完了,就改个变换方式咯
            self.transform = lastTransform!
            
        }) { (complet) in
            
            UIView.animate(withDuration: interval, animations: {
                self.layer.setAffineTransform(CGAffineTransform.identity)
            }, completion: { (complet) in
                completion?()
            })
        }
    }
  • 说实话啥,第一种扩展还是比较好理解也比较好写的。。。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Swift 视图抖动扩展一

    韦弦zhy
  • Swift 删除链表的倒数第N个节点 - LeetCode

    构建双指针first与sec,first先走n步,然后一同运动,当first指向表尾,sec指向的next即是倒数第N个节点,删除即可(next指向next的n...

    韦弦zhy
  • SwiftUI 布局:视图的绝对定位

    SwiftUI为我们提供了两种定位视图的方法:使用 position() 的绝对位置和使用 offset() 的相对位置。它们看起来可能很相似,但一旦了解了 S...

    韦弦zhy
  • 盲注基本原理

    1.xxx.com/index.php?ID=79这个位置单引号报错,并且直接给出错误信息:

    天钧
  • 算法--链表相关套路

    通常来说,链表的问题从概念上讲很简单,更多时单纯的考察编码能力,而不是设计和解决算法。

    宇宙之一粟
  • 面试必备|单链表反转思路图形解析

    01 — 单链表 链表玩的是指针操作,非常容易出错,尽管看似很简单。 先定义一种单链表,JAVA(或C#)描述的数据结构如下: public class...

    double
  • 数据结构 | 每日一练(102)

    ——老子

    C语言入门到精通
  • 剑指OFFER之合并有序链表(九度OJ1519)

    题目描述: 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 (hint: 请务必使用链表。) 输入: 输入可能包含...

    用户1154259
  • 吃透洋葱模型

    作者:掘金@苏里 https://juejin.im/post/6844904025767280648

    zz_jesse
  • KMP算法学习(详解)

    kmp算法又称“看毛片”算法,是一个效率非常高的字符串匹配算法。不过由于其难以理解,所以在很长的一段时间内一直没有搞懂。虽然网上有很多资料,但是鲜见好的博客能简...

    Angel_Kitty

扫码关注云+社区

领取腾讯云代金券