简单自定义选择按钮(switchDemo)
来源:互联网 发布:淘宝到了1个钻 编辑:程序博客网 时间:2024/06/06 05:17
虽然系统的UISwitch效果已经很好了,附带的动画效果也是很好的,但是在实际开发中UI和程序员对头(产品经理)经常会要求按照项目的整体效果使用其他的图片或者背景来代替,这里仅在项目中做了一个简单的自定义switch.
demo图样
主要是使用自定义UIView,利用背景图片的切换,和按钮图片的x的位置开实现.
这里把demo放上,方便以后查看 : demo地址
WJSwitch.h
#import <UIKit/UIKit.h>@protocol WJSwitchViewDelegate <NSObject>/** * 开关是否开启 * * @param isopen YES 开启 NO 关闭 * @param tag tag值 */-(void)WJSwitchViewDelegateWithSwitchStates:(BOOL)isopen withTag:(NSInteger)tag;@end@interface WJSwitchView : UIView@property(nonatomic,weak) id <WJSwitchViewDelegate> delegate;//代理-(instancetype)initWithFrame:(CGRect)frame withTag:(NSInteger)tag delegate:(id)delegate;@end
WJSwitch.m
#import "WJSwitchView.h"@interface WJSwitchView (){ BOOL isOpen;//是否开启(右边为开启)}@property(nonatomic,strong) UIImageView * bgView;//背景图片@property(nonatomic,strong) UIImageView * btnView;//按钮图片@property(nonatomic,assign) CGFloat beginpoint;//开始的位置@end@implementation WJSwitchView-(instancetype)initWithFrame:(CGRect)frame withTag:(NSInteger)tag delegate:(id)delegate{ if (self = [super initWithFrame:frame]) { [self setFrame:frame]; [self setBtnImageView]; self.tag = tag; self.delegate = delegate; } return self;}/** * 设置按钮背景图片 */-(void)setBtnImageView{ //设置背景图片 self.bgView = [[UIImageView alloc] initWithFrame:self.bounds]; [self.bgView setImage:[UIImage imageNamed:@"bgViewOff"]]; [self addSubview:self.bgView]; isOpen = NO; //设置按钮图片 self.btnView = [[UIImageView alloc] initWithFrame:CGRectMake(2, 2, CGRectGetWidth(self.frame)/2, CGRectGetHeight(self.frame)-4)]; [self.btnView setImage:[UIImage imageNamed:@"switchBtn"]]; [self addSubview:self.btnView];}
触摸方法
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ // UITouch * touch = [touches anyObject]; // self.beginpoint = [touch locationInView:self].x; if (!isOpen) { [self switchOpen]; isOpen = YES; }else{ [self switchClose]; isOpen = NO; } //实现协议方法 传递按钮tag和是否开启 if (self.delegate && [self.delegate respondsToSelector:@selector(WJSwitchViewDelegateWithSwitchStates: withTag:)]) { [self.delegate WJSwitchViewDelegateWithSwitchStates:isOpen withTag:self.tag]; }}
/** * 开启 */-(void)switchOpen{ dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.005 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [self.bgView setImage:[UIImage imageNamed:@"bgViewOn"]]; }); CGFloat X = CGRectGetWidth(self.frame)/2; CGRect frame = self.btnView.frame; /*创建弹性动画 damping:阻尼,范围0-1,阻尼越接近于0,弹性效果越明显 velocity:弹性复位的速度 */ [UIView animateWithDuration:0.2 delay:0 usingSpringWithDamping:0.8 initialSpringVelocity:1.0 options:UIViewAnimationOptionCurveLinear animations:^{ [self.btnView setFrame:CGRectMake(X, frame.origin.y, frame.size.width, frame.size.height)]; } completion:nil];}/** * 关闭 */-(void)switchClose{ //替换图片 这里仅做简单的图片替换 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.005 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [self.bgView setImage:[UIImage imageNamed:@"bgViewOff"]]; }); CGFloat X = 2; CGRect frame = self.btnView.frame; //修改按钮图片的位置 [UIView animateWithDuration:0.2 delay:0 usingSpringWithDamping:0.9 initialSpringVelocity:1.0 options:UIViewAnimationOptionCurveLinear animations:^{ [self.btnView setFrame:CGRectMake(X, frame.origin.y, frame.size.width, frame.size.height)]; } completion:nil];}
viewController.m
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. //创建view WJSwitchView * firstView = [[WJSwitchView alloc] initWithFrame:self.firstSwitchView.bounds withTag:1 delegate:self]; [self.firstSwitchView addSubview:firstView]; WJSwitchView * secondView = [[WJSwitchView alloc] initWithFrame:self.firstSwitchView.bounds withTag:2 delegate:self]; [self.secondSwitchView addSubview:secondView]; WJSwitchView * thirdView = [[WJSwitchView alloc] initWithFrame:self.firstSwitchView.bounds withTag:3 delegate:self]; [self.thirdSwitchView addSubview:thirdView];}#pragma mark - WJSwitchViewDelegate//协议方法-(void)WJSwitchViewDelegateWithSwitchStates:(BOOL)isopen withTag:(NSInteger)tag{ NSLog(@"%ld",tag);}
按钮的位置移动可以使用CAAnimation做一些简单的动画过度,或者直接使用UIView的封装方法实现一些效果来实现,关于动画的一些基本应用,在文集中有转载一篇写的特好的文章讲动画的!!建议自己可以跟着敲一次!!
PS:能用自带插件最好劝说需求用吧,毕竟系统的很强大! ~~不过我和我们需求谈判失败了…
阅读全文
0 0
- 简单自定义选择按钮(switchDemo)
- SwitchDemo
- 自定义滑动选择按钮
- 自定义左右按钮选择控件
- 简单的自定义倒计时按钮
- 自定义View-5-拖动选择按钮
- 选择屏幕上增加自定义按钮
- Android自定义view:拖拽选择按钮
- 选择屏幕中 如何自定义 功能按钮
- 一个简单自定义屏幕,并调用word和excel的样例程序 1000弹出选择按钮
- 自定义按钮控件的简单编写
- 自定义列表编辑状态左侧选择按钮图片
- 复习6:SwitchDemo
- 简单实现自定义横向滚动选择View
- 选择按钮
- 选择按钮
- 文件读写工具简单实现(二)--选择文件按钮
- [iOS 自定义TableviewCell 按钮复用问题] 按钮选择 避免复用
- ELK-5.4.1和x-pack权限控制 安装指导
- SO_SNDTIMEO和SO_RCVTIMEO
- DB2、Oracle命令行导入/导出数据
- Tomcat源码解析(9)
- 报错com.neenbedankt.android-apt not found如何解决
- 简单自定义选择按钮(switchDemo)
- 整数中1出现的次数
- NavigationView
- 升级安装APK兼容Android7.0,解决FileUriExposedException
- 矩陣置换
- 下载安装apk(最终)
- 关于Java中try finally return语句的执行顺序分析
- 【多媒体编解码】Android 视频解析MediaExtractor
- Eclipse+maven配置SSM(Spring+SpringMVC+mybatis)