로그인 인터페이스 입력박스 디더링 애니메이션

1460 단어
좋아, 난 쓸데없는 말 하는 사람을 별로 좋아하지 않아. 다음은 바로 코드를 봐. 코드에 상세한 주석이 있어.
/**
 *                   
 *
 *  @param textField       /     
 */
- (void)shakeActionWithTextField:(UITextField *)textField
{
    //     
    static int numberOfShakes = 4;
    //     (      )
    static float vigourOfShake = 0.01f;
    //       ( )
    static float durationOfShake = 0.5f;
    //    
    CAKeyframeAnimation *shakeAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
 
    CGRect frame = textField.frame;
    //     
    CGMutablePathRef shakePath = CGPathCreateMutable();
    //    
    CGPathMoveToPoint(shakePath, NULL, CGRectGetMidX(frame), CGRectGetMidY(frame));
    for (int index = 0; index < numberOfShakes; index++)
    {
        //              
        CGPathAddLineToPoint(shakePath, NULL, CGRectGetMidX(frame) - frame.size.width * vigourOfShake*(1-(float)index/numberOfShakes),CGRectGetMidY(frame));
        CGPathAddLineToPoint(shakePath, NULL,  CGRectGetMidX(frame) + frame.size.width * vigourOfShake*(1-(float)index/numberOfShakes),CGRectGetMidY(frame));
    }
    //   
    CGPathCloseSubpath(shakePath);
    shakeAnimation.path = shakePath;
    shakeAnimation.duration = durationOfShake;
    //   
    CFRelease(shakePath);
 //        layer --- bingo---
    [textField.layer addAnimation:shakeAnimation forKey:kCATransition];
}

데모 여기 보세요.
https://github.com/wxh794708907/YJYYShakeAnimation/tree/master

좋은 웹페이지 즐겨찾기