#define detal 80; // 按钮间距 #import "ZZMenuView.h" @interface ZZMenuView() @property (nonatomic, strong) NSMutableArray *items; @property (weak, nonatomic) IBOutlet UIButton *mainBtn; @end @implementation ZZMenuView /* // Only override drawRect: if you perform custom drawing. // An empty implementation adversely affects performance during animation. - (void)drawRect:(CGRect)rect { // Drawing code } */ - (NSMutableArray *)items { if (!_items) { _items = [NSMutableArray array]; } return _items; } + (instancetype)MenuView { return [[[NSBundle mainBundle] loadNibNamed:@"ZZMenu" owner:nil options:nil] lastObject]; } #warning 对象是从xib storybord中加载时会调用这个方法 - (instancetype)initWithCoder:(NSCoder *)aDecoder { if (self = [super initWithCoder:aDecoder]) { [self initItems]; } return self; } // 初始化三个隐藏的按钮 - (void)initItems { // NSLog(@"!!!!"); [self addBtnWithImgName:@"menu_btn_call" tag:1]; [self addBtnWithImgName:@"menu_btn_cheyou" tag:2]; [self addBtnWithImgName:@"menu_btn_tixing" tag:3]; } - (void) addBtnWithImgName:(NSString *)imgName tag:(NSInteger)tag { UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; [btn setBackgroundImage:[UIImage imageNamed:imgName] forState:UIControlStateNormal]; btn.tag = tag; [self.items addObject:btn]; [self addSubview:btn]; } #pragma mark - 设置按钮尺寸位置 - (void)layoutSubviews { [super layoutSubviews]; CGRect btnRect = CGRectMake(0,0,30,30); for (UIButton *btn in self.items) { btn.bounds = btnRect; btn.center = self.mainBtn.center; } // [self bringSubviewToFront: self.mainBtn]; } - (IBAction)mainBtnClick:(UIButton *)mainBtn { BOOL show = CGAffineTransformIsIdentity(self.mainBtn.transform); [UIView animateWithDuration:1 animations:^{ if (show) { self.mainBtn.transform = CGAffineTransformMakeRotation(M_PI_4); }else{ self.mainBtn.transform = CGAffineTransformIdentity; } }]; [self showItems:show]; } - (void)showItems:(BOOL)isShow { if (isShow) { // 选项按钮位置调整 for (UIButton *btn in self.items) { CGFloat centerX = self.mainBtn.center.x + btn.tag * detal; CGFloat centerY = self.mainBtn.center.y; CGPoint showPoint = CGPointMake(centerX, centerY); btn.center = showPoint; // 为每一个按钮都添加组动画 CAAnimationGroup *groupAnimations = [CAAnimationGroup animation]; // 创建平移动画 CAKeyframeAnimation *transformAni =[CAKeyframeAnimation animation]; transformAni.keyPath = @"position"; NSValue *value1 = [NSValue valueWithCGPoint:self.mainBtn.center]; NSValue *value2 = [NSValue valueWithCGPoint:CGPointMake(centerX*0.5, centerY)]; NSValue *value3 = [NSValue valueWithCGPoint:CGPointMake(centerX*1.1, centerY)]; NSValue *value4 = [NSValue valueWithCGPoint:showPoint]; // 设置平移路径 transformAni.values = @[value1,value2,value3,value4]; //创建旋转动画 CAKeyframeAnimation *rotationAni = [CAKeyframeAnimation animation]; rotationAni.keyPath = @"transform.rotation"; rotationAni.values = @[@0,@(M_PI * 2),@(M_PI * 4),@(M_PI *2)]; // 设置旋转路径 groupAnimations.animations = @[transformAni,rotationAni]; groupAnimations.duration =1.5; //给每一个按钮的图层都添加组动画 [btn.layer addAnimation:groupAnimations forKey:nil]; } }else{ for (UIButton *btn in self.items) { //获取现在的位置 CGPoint currentPositon = btn.center; btn.center = self.mainBtn.center; CGFloat centerY = self.mainBtn.center.y; btn.transform = CGAffineTransformIdentity; // 为每一个按钮都添加组动画 CAAnimationGroup *groupAnimations = [CAAnimationGroup animation]; // 创建平移动画 CAKeyframeAnimation *transformAni =[CAKeyframeAnimation animation]; transformAni.keyPath = @"position"; NSValue *value2 = [NSValue valueWithCGPoint:CGPointMake(currentPositon.x*1.1, centerY)]; NSValue *value1 = [NSValue valueWithCGPoint:currentPositon]; NSValue *value3 = [NSValue valueWithCGPoint:CGPointMake(currentPositon.x*0.5,centerY)]; NSValue *value4 = [NSValue valueWithCGPoint:self.mainBtn.center]; // 设置平移路径 transformAni.values = @[value1,value2,value3,value4]; //创建旋转动画 CAKeyframeAnimation *rotationAni = [CAKeyframeAnimation animation]; rotationAni.keyPath = @"transform.rotation"; rotationAni.values = @[@0,@(M_PI * 2),@0,@(-M_PI * 2)]; // 设置旋转路径 groupAnimations.animations = @[transformAni,rotationAni]; groupAnimations.duration = 5; //给每一个按钮的图层都添加组动画 [btn.layer addAnimation:groupAnimations forKey:nil]; } } } @end
时间: 2024-10-12 15:03:46