UIResponder
UIResponder:是一个响应者(传达者)用来响应用户的触摸屏幕的某些事件
手势
手势分为六大手势,都继承自UIGestureRecognizer
1、点击UITapGestureRecognizer
可以通过手势里面的view属性找到点击的视图
locationaInView:找到点击的位置
numberOfTapsRequired设置点击手势的点击次数
numberOfTouchesRequired设置点击手指的个数
2、长按UILongPressGestureRecognizer
minimumPressDuration设置长按的时间多长时间才会去触发
3、拖拽UIPanGestureRecognizer
minimumNumberOfTouches最少手指
maximumNumberOfTouches最多手指
点击位置是0,0向左减小向上减小可以获得拖动的方向和位置
CGPoint
point = [手势translationInView:视图];
4、捏合UIPinchGestureRecognizer
使一个视图变形transform ->UIView中的属性可以使视图发生形态上的改变
变形之后的视图做其他操作不会还原除非用transform里面的还原的方法
CGAffineTransform让试图改变的类
CGAffineTransformMakeScale(CGFloat
sx, CGFloat sy)让视图按照一个比例去变化放大缩小
CGAffineTransformMakeRotation(CGFloat
angle)让视图按照一个弧度去改变用于旋转
CGAffineTransformIdentity还原之前改变的形状
5、轻扫UISwipeGestureRecognizer
numberOfTouchesRequired最少手指
*direction设置轻扫的方向
这个用法让轻扫的方向是左或者右
swipe.direction
= UISwipeGestureRecognizerDirectionRight|UISwipeGestureRecognizerDirectionLeft;
UISwipeGestureRecognizerDirectionRight
UISwipeGestureRecognizerDirectionLeft
UISwipeGestureRecognizerDirectionUp
UISwipeGestureRecognizerDirectionDown
6、旋转UIRotationGestureRecognizer
获得手势的旋转角度让imageView随这个角度去变化
imageView.transform
= CGAffineTransformMakeRotation(sender.rotation);
手势的属性方法
初始化
-(instancetype)initWithTarget:(nullableid)targetaction:(nullableSEL)action
*状态属性:state
UIGestureRecognizerStatePossible,默认
UIGestureRecognizerStateBegan,开始
UIGestureRecognizerStateChanged,改变
UIGestureRecognizerStateEnded,结束
UIGestureRecognizerStateCancelled,取消
UIGestureRecognizerStateFailed,失败
*UIView里面有添加手势的方法要用UIView的对象去调用
addGestureRecognizer:
手势的触发方法
*手指开始触摸屏幕的时候调用
- (void)touchesBegan:(NSSet *)touches withEvent:(nullableUIEvent*)event;
注:
anyObject 获得touches这个集合里面的某一个touch事件
UITouch *touch = [touches anyObject];
找到触摸视图上面的触摸点
CGPointpoint = [touch locationInView:self.view];
*手指触摸屏幕开始移动的时候
- (void)touchesMoved:(NSSet*)touches withEvent:(nullableUIEvent*)event;
*手指离开屏幕的时候
- (void)touchesEnded:(NSSet*)touches withEvent:(nullableUIEvent*)event;
*手指因外部事件取消触摸(一些外部事件让取消比如来电话)
- (void)touchesCancelled:(nullableNSSet *)touches withEvent:(nullableUIEvent *)event;
注:若手势不调用,检查是否设置了背景颜色。我就犯过这种错误。
网友评论