前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Swift 视图抖动扩展一

Swift 视图抖动扩展一

作者头像
韦弦zhy
发布2018-09-11 12:49:35
1K0
发布2018-09-11 12:49:35
举报
文章被收录于专栏:韦弦的偶尔分享
要给视图添加一个抖动效果,比如登录时输入框校验出错给出提示之类的~~~反正就是项目中用到了咯。。。

那就写个就是了

  • 基本思路就是让视图左右移动或者上下移动
代码语言:javascript
复制
调用视图的仿射变换函数就可以了吧
view.layer.setAffineTransform( CGAffineTransform(translationX: 2, y: 0))
这就可以让视图往左变换了,往右就是-2咯,改Y就是上下呗
  • 抖动,抖动肯定是有次数的,我们根据次数来移动视图,每次调用自身扩展修改方向

具体代码我就粘在下面咯,反正也没多少行

代码语言:javascript
复制
//
//  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 shake(direction: ZHYShakeDirection = .horizontal, times: Int = 5, interval: TimeInterval = 0.1, offset: CGFloat = 2, completion: (() -> Void)? = nil) {
        
        //移动视图动画(一次)
        UIView.animate(withDuration: interval, animations: {             
            switch direction {
                case .horizontal:
                    self.layer.setAffineTransform(CGAffineTransform(translationX: offset, y: 0))
                case .vertical:
                    self.layer.setAffineTransform(CGAffineTransform(translationX: 0, y: offset))
            }
            
        }) { (complete) in
            //如果当前是最后一次抖动,则将位置还原,并调用完成回调函数
            if (times == 0) {
                UIView.animate(withDuration: interval, animations: { 
                    self.layer.setAffineTransform(CGAffineTransform.identity)
                }, completion: { (complete) in
                    completion?()
                })
            }
            
            //如果当前不是最后一次,则继续动画,偏移位置相反
            else {
                self.shake(direction: direction, times: times - 1, interval: interval, offset: -offset, completion: completion)
            }
        }
    }
}
  • 全部都设置了默认值,所以你可以这样子调用的
代码语言:javascript
复制
//一个简单的调用,全部使用默认值,抖动完成后不做任何操作
view.shake()
  • 默认是水平抖动,设置抖动方向很简单的
代码语言:javascript
复制
//这样就设置为垂直抖动啦。。。
view.shake(direction: .vertical)
  • 再粘一个完全的调用
代码语言:javascript
复制
label.shake(direction: .horizontal, times: 9, interval: 0.03, offset: 3) {
    print("我抖完了,该你了。")
}
  • (PS: 把interval调小点。。。抖动可带劲了。。。)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017.08.16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 要给视图添加一个抖动效果,比如登录时输入框校验出错给出提示之类的~~~反正就是项目中用到了咯。。。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档