首页 > 代码库 > 旋转动画用控件RotateView

旋转动画用控件RotateView

旋转动画用控件RotateView

最终效果:

源码:

RotateView.h 与 RotateView.m

////  RotateView.h//  RotateAnimationView////  Created by YouXianMing on 14/12/8.//  Copyright (c) 2014年 YouXianMing. All rights reserved.//#import <UIKit/UIKit.h>/** *  要注意normalInputView与disableInputView的frame值最好与RotateView的bounds值一致 */@interface RotateView : UIView/** *  显示常规的view */@property (nonatomic, strong) UIView   *normalInputView;/** *  禁用状态的view */@property (nonatomic, strong) UIView   *disableInputView;/** *  旋转时间 */@property (nonatomic, assign) CGFloat   rotateDuration;/** *  view切换时间 */@property (nonatomic, assign) CGFloat   fadeDuration;/** *  旋转到向上的位置(默认的位置) * *  @param animated 是否显示动画 */- (void)changeToUpAnimated:(BOOL)animated;/** *  旋转到向左的位置 * *  @param animated 是否显示动画 */- (void)changeToLeftAnimated:(BOOL)animated;/** *  旋转到向右的位置 * *  @param animated 是否显示动画 */- (void)changeToRightAnimated:(BOOL)animated;/** *  旋转到向下的位置 * *  @param animated 是否显示动画 */- (void)changeTodownAnimated:(BOOL)animated;/** *  渐变到显示常规的view * *  @param animated 是否显示动画 */- (void)fadeToNormalInputViewAnimated:(BOOL)animated;/** *  渐变到禁用状态的view * *  @param animated 是否显示动画 */- (void)fadeToDisableInputViewAnimated:(BOOL)animated;@end
////  RotateView.m//  RotateAnimationView////  Created by YouXianMing on 14/12/8.//  Copyright (c) 2014年 YouXianMing. All rights reserved.//#import "RotateView.h"static CGFloat defaultDuration = 0.25f;typedef enum : NSUInteger {    UIVIEW_normalInputView = 0xEEFF,    UIVIEW_disableInputView,} EnumRotateView;@interface RotateView ()@property (nonatomic, assign) CGAffineTransform  defaultTransform;@end@implementation RotateView- (instancetype)initWithFrame:(CGRect)frame{    self = [super initWithFrame:frame];    if (self) {        _defaultTransform = self.transform;    }    return self;}#pragma mark - 动画的执行- (void)changeToUpAnimated:(BOOL)animated {    if (animated) {        [UIView animateWithDuration:(_rotateDuration > 0 ? _rotateDuration : defaultDuration)                         animations:^{                             self.transform = _defaultTransform;                         }];    } else {        self.transform = _defaultTransform;    }}- (void)changeToLeftAnimated:(BOOL)animated {    if (animated) {        [UIView animateWithDuration:(_rotateDuration > 0 ? _rotateDuration : defaultDuration)                         animations:^{                             self.transform = CGAffineTransformRotate(_defaultTransform, -M_PI_2);                         }];    } else {        self.transform = CGAffineTransformRotate(_defaultTransform, -M_PI_2);    }}- (void)changeToRightAnimated:(BOOL)animated {    if (animated) {        [UIView animateWithDuration:(_rotateDuration > 0 ? _rotateDuration : defaultDuration)                         animations:^{                             self.transform = CGAffineTransformRotate(_defaultTransform, M_PI_2);                         }];    } else {        self.transform = CGAffineTransformRotate(_defaultTransform, M_PI_2);    }}- (void)changeTodownAnimated:(BOOL)animated {    if (animated) {        [UIView animateWithDuration:(_rotateDuration > 0 ? _rotateDuration : defaultDuration)                         animations:^{                             self.transform = CGAffineTransformRotate(_defaultTransform, M_PI);                         }];    } else {        self.transform = CGAffineTransformRotate(_defaultTransform, M_PI);    }}- (void)fadeToNormalInputViewAnimated:(BOOL)animated {    if (animated) {        [UIView animateWithDuration:(_fadeDuration > 0 ? _fadeDuration : defaultDuration)                         animations:^{                             [self viewWithTag:UIVIEW_normalInputView].alpha = 1.f;                         }];    } else {        [self viewWithTag:UIVIEW_normalInputView].alpha = 1.f;    }}- (void)fadeToDisableInputViewAnimated:(BOOL)animated {    if (animated) {        [UIView animateWithDuration:(_fadeDuration > 0 ? _fadeDuration : defaultDuration)                         animations:^{                             [self viewWithTag:UIVIEW_normalInputView].alpha = 0.f;                         }];    } else {        [self viewWithTag:UIVIEW_normalInputView].alpha = 0.f;    }}#pragma mark - 重写setter,getter方法@synthesize normalInputView = _normalInputView;- (void)setNormalInputView:(UIView *)normalInputView {    normalInputView.frame                  = normalInputView.bounds;    normalInputView.userInteractionEnabled = NO;    normalInputView.tag                    = UIVIEW_normalInputView;    [self addSubview:normalInputView];        [self bringSubviewToFront:normalInputView];}- (UIView *)normalInputView {    return [self viewWithTag:UIVIEW_normalInputView];}@synthesize disableInputView = _disableInputView;- (void)setDisableInputView:(UIView *)disableInputView {    disableInputView.frame                  = disableInputView.bounds;    disableInputView.userInteractionEnabled = NO;    disableInputView.tag                    = UIVIEW_disableInputView;    [self addSubview:disableInputView];        [self sendSubviewToBack:disableInputView];}- (UIView *)disableInputView {    return [self viewWithTag:UIVIEW_disableInputView];}@end

使用的源码:

////  ViewController.m//  CircleView////  Created by YouXianMing on 14/12/9.//  Copyright (c) 2014年 YouXianMing. All rights reserved.//#import "ViewController.h"#import "RotateView.h"@interface ViewController ()@property (nonatomic, strong) RotateView *rotateView;@end@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];    // 输入图片与输出图片    UIImageView *normalView  = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"normal"]];    UIImageView *disableView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"disable"]];    // 旋转的view    _rotateView                  = [[RotateView alloc] initWithFrame:normalView.bounds];    _rotateView.center           = self.view.center;    _rotateView.normalInputView  = normalView;    _rotateView.disableInputView = disableView;    [self.view addSubview:_rotateView];        // 延时    [self performSelector:@selector(excuteEventOne)               withObject:nil               afterDelay:7.f];        // 延时    [self performSelector:@selector(excuteEventTwo)               withObject:nil               afterDelay:9.f];}- (void)excuteEventOne {    [_rotateView changeTodownAnimated:YES];    [_rotateView fadeToDisableInputViewAnimated:YES];}- (void)excuteEventTwo {    [_rotateView changeToUpAnimated:YES];    [_rotateView fadeToNormalInputViewAnimated:YES];}@end

较为核心的地方:

 

旋转动画用控件RotateView