今天工作中遇到一个效果,平常我们也是很经常使用的,就是长按一个按钮做一个变换,或者是隐藏显示,或者是变色之类的,方法都是一样的。我采用的长按手势写的,分享出来。
#import
@interface MyButton :UIButton
@end
#import "MyButton.h"
@implementation MyButton
-(id)init
{
self = [superinit];
if (self)
{
[selfloadGesture];
}
return self;
}
/**
* 代码实例化控件是走的构造方法
*
* @param frame <#frame description#>
*
* @return <#return value description#>
*/
-(id)initWithFrame:(CGRect)frame
{
self = [superinitWithFrame:frame];
if (self)
{
[selfloadGesture];
}
return self;
}
/**
* nib加载的时候走的控件的加载方法
*
* @param aDecoder <#aDecoder description#>
*
* @return <#return value description#>
*/
-(id)initWithCoder:(NSCoder *)aDecoder
{
self = [superinitWithCoder:aDecoder];
if (self)
{
[selfloadGesture];
}
return self;
}
/**
* 加载手势方法
*/
-(void)loadGesture
{
//加载一个长按手势
UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizeralloc]initWithTarget:self
action:@selector(choose:)];
longPress.minimumPressDuration = 2;
[selfaddGestureRecognizer:longPress];
}
/**
* 手势动作
*/
-(void)choose:(UILongPressGestureRecognizer *)longPress
{
if(longPress.state ==UIGestureRecognizerStateBegan)
{
NSLog(@"111");
if (self.selected)
{
[UIViewanimateWithDuration:0.5 animations:^
{
self.backgroundColor = [UIColoryellowColor];
}];
self.selected =NO;
return;
}
else
[UIViewanimateWithDuration:0.5 animations:^
{
self.backgroundColor = [UIColorblackColor];
self.selected =YES;
return ;
}];
}
}
允许多个手势
//- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
//{
// return YES;
//}
@end
-(id)init
{
self = [superinit];
if (self)
{
[selfloadGesture];
}
return self;
}
/**
* 代码实例化控件是走的构造方法
*
* @param frame <#frame description#>
*
* @return <#return value description#>
*/
-(id)initWithFrame:(CGRect)frame
{
self = [superinitWithFrame:frame];
if (self)
{
[selfloadGesture];
}
return self;
}
/**
* nib加载的时候走的控件的加载方法
*
* @param aDecoder <#aDecoder description#>
*
* @return <#return value description#>
*/
-(id)initWithCoder:(NSCoder *)aDecoder
{
self = [superinitWithCoder:aDecoder];
if (self)
{
[selfloadGesture];
}
return self;
}
/**
* 加载手势方法
*/
-(void)loadGesture
{
//加载一个长按手势
UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizeralloc]initWithTarget:self
action:@selector(choose:)];
longPress.minimumPressDuration = 2;
[selfaddGestureRecognizer:longPress];
}
允许多个手势
//- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
//{
// return YES;
//}
这一个方法大家也看到了,被我注释掉了。因为大家都知道其实按钮说白了也是被苹果封装了,里面封装的点击手势UITapGestureRecognizer,一个控件默认只会响应一个手势。那么既然本身已经有点击手势了,如果再响应其他的手势就要更改按钮的默认响应一个手势。用这个方法打开返回Yes,让按钮可以响应多手势。但是我把他关了也是可以运行,那么应该是苹果很贴心的在按钮里面已经集成了这个方法。
至此,无论是你代码创建的按钮,还是nib创建的按钮,把类型定义为MyButton类型,直接使用就行了。
运行中,你会发现按钮颜色改变的过程中显示按钮字体那一块会有个蓝色的背景块,考考你,自己解决了。实在不会了,再给你说吧。