iOS 左右抖动的动画

我是写了个扩展类,方便用到的view可以很便捷的使用,以下是所有代码,可以直接引入工程使用

OC版

/**

   扩展UIView增加抖动方法

    

   @param direction:抖动方向(默认是水平方向)

   @param times:抖动次数(默认5次)

   @param interval:每次抖动时间(默认0.1秒)

   @param delta:抖动偏移量(默认2)

   @param completion:抖动动画结束后的回调

   */

-(void)shakeDirection:(ShakeDirection)direction times:(int)times interval:(NSTimeInterval)interval delta:(CGFloat) delta finished:(finished)finished{

if (times == 0) {

        self.transform = CGAffineTransformIdentity;

    }else{

        

            [UIView animateWithDuration:interval animations:^{

                switch (direction) {

                    case horizontal:

                    {

                        self.transform = CGAffineTransformMakeTranslation(delta, 0);

                    }

                        break;

                    case vetrtical:{

                        self.transform = CGAffineTransformMakeTranslation(0,delta);

                    }

                        break;

                    default:

                        break;

                }

                } completion:^(BOOL finish) {

                    [self shakeDirection:horizontal times:times-1 interval:interval delta:delta * -1 finished:finished];

                }];

    }

}

swift版本

extension UIView{

    public func shake(direction:ShakeDirection = .horizontal,times: Int = 5,

                      interval:TimeInterval = 0.1, delta : CGFloat = 2,completion:(() -> Void)?=nil){

        if times == 0 {

            self.layer.setAffineTransform(CGAffineTransform.identity)

        }else{

            UIView.animate(withDuration: interval) {

                switch direction {

                case .horizontal:

                    self.layer.setAffineTransform(CGAffineTransform(translationX: delta, y: 0))

                    break

                case .vertical:

                    self.layer.setAffineTransform(CGAffineTransform(translationX: 0, y: delta))

                    break

                    

                }

            } completion: { (finished) in

                self.shake(direction: direction, times: times - 1 , interval: interval, delta: delta * -1, completion: completion)

            }

        }

        }

}

猜你喜欢

转载自blog.csdn.net/ForeverMyheart/article/details/114670740