編寫帶有點選特效的UIButton
效果:
原始碼:
// // ViewController.m // Button // // Created by XianMingYou on 15/1/18. // Copyright (c) 2015年 XianMingYou. All rights reserved. // #import "ViewController.h" @interface ViewController () @property (nonatomic, strong) UIButton *button; @property (nonatomic, strong) UIView *showView; @property (nonatomic, strong) UILabel *showLabel; @property (nonatomic, strong) UILabel *staticLabel; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor blackColor]; self.showView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 300, 0)]; self.showView.transform = CGAffineTransformMakeRotation(45 * M_PI / 180.0); self.showView.userInteractionEnabled = NO; self.showView.backgroundColor = [UIColor redColor]; self.staticLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 130, 30)]; self.staticLabel.text = @"YouXianMing"; self.staticLabel.font = [UIFont fontWithName:@"HelveticaNeue-Thin" size:18.f]; self.staticLabel.textAlignment = NSTextAlignmentCenter; self.staticLabel.textColor = [UIColor redColor]; self.showLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 130, 30)]; self.showLabel.text = @"YouXianMing"; self.showLabel.alpha = 0.f; self.showLabel.font = [UIFont fontWithName:@"HelveticaNeue-Thin" size:18.f]; self.showLabel.textAlignment = NSTextAlignmentCenter; self.showLabel.textColor = [UIColor blackColor]; // 完整顯示按住按鈕後的動畫效果 _button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 130, 30)]; _button.backgroundColor = [UIColor clearColor]; _button.layer.borderWidth = 1.f; _button.layer.borderColor = [UIColor redColor].CGColor; _button.layer.masksToBounds = YES; _button.center = self.view.center; [self.view addSubview:_button]; self.showView.center = CGPointMake(_button.frame.size.width / 2.f, _button.frame.size.height / 2.f); [_button addSubview:self.showView]; self.staticLabel.center = CGPointMake(_button.frame.size.width / 2.f, _button.frame.size.height / 2.f); [_button addSubview:self.staticLabel]; self.showLabel.center = CGPointMake(_button.frame.size.width / 2.f, _button.frame.size.height / 2.f); [_button addSubview:self.showLabel]; // 按住按鈕後沒有鬆手的動畫 [_button addTarget:self action:@selector(scaleToSmall) forControlEvents:UIControlEventTouchDown | UIControlEventTouchDragEnter]; // 按住按鈕鬆手後的動畫 [_button addTarget:self action:@selector(scaleAnimation) forControlEvents:UIControlEventTouchUpInside]; // 按住按鈕後拖拽出去的動畫 [_button addTarget:self action:@selector(scaleToDefault) forControlEvents:UIControlEventTouchDragExit]; } - (void)scaleToSmall { [UIView animateWithDuration:0.5f animations:^{ self.showView.bounds = CGRectMake(0, 0, 300, 90); self.showView.backgroundColor = [UIColor redColor]; self.showLabel.alpha = 1.f; } completion:^(BOOL finished) { NSLog(@"%d", finished); }]; } - (void)scaleAnimation { // 獲取到當前的狀態 self.showView.bounds = ((CALayer *)self.showView.layer.presentationLayer).bounds; self.showView.layer.backgroundColor = ((CALayer *)self.showView.layer.presentationLayer).backgroundColor; self.showLabel.alpha = ((CALayer *)self.showLabel.layer.presentationLayer).opacity; // 移除之前的動畫狀態 [self.showView.layer removeAllAnimations]; // 做全新的動畫 [UIView animateWithDuration:0.25f animations:^{ self.showView.bounds = CGRectMake(0, 0, 300, 0); self.showView.backgroundColor = [UIColor clearColor]; self.showLabel.alpha = 0.f; } completion:^(BOOL finished) { }]; } - (void)scaleToDefault { // 獲取到當前的狀態 self.showView.bounds = ((CALayer *)self.showView.layer.presentationLayer).bounds; self.showView.layer.backgroundColor = ((CALayer *)self.showView.layer.presentationLayer).backgroundColor; self.showLabel.alpha = ((CALayer *)self.showLabel.layer.presentationLayer).opacity; // 移除之前的動畫狀態 [self.showView.layer removeAllAnimations]; // 做全新的動畫 [UIView animateWithDuration:0.25f animations:^{ self.showView.bounds = CGRectMake(0, 0, 300, 0); self.showView.backgroundColor = [UIColor clearColor]; self.showLabel.alpha = 0.f; } completion:^(BOOL finished) { }]; } @end
核心原始碼: