事件:當用戶手指觸擊屏幕以及在屏幕上移動時,系統不斷發送給應用程序的對象,一個UIEvent對象表示一個事件
觸摸:有事件控件兩方面
時間:手指放下,手指移動,手指抬起
空間:手指放下,移動,抬起的位置
觸摸開始
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent: (UIEvent *)event { NSLog(@"開始觸摸"); }
手指移動
- (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { UITouch *touch = [[touches allObjects] lastObject]; CGPoint point = [touch locationInView:self]; NSLog(@"x = %f, y = %f", point.x, point.y); }
觸摸結束
- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { NSLog(@"觸摸結束"); }
響應者鏈:一個響應者對象的連接序列,事件或動作消息依次傳遞
響應者:iOS中所有能響應事件的對象都是響應者,一同定義了一個抽象的父類UIResponder來表示響應者
檢查觸摸:UIApplications -> window -> ViewController -> view -> 檢查所有子視圖
處理事件:觸摸的子視圖 -> view -> ViewController -> window -> UIApplication
視圖類的屬性userInteractionEnabled
可以阻斷響應者鏈
userInteractionEnabled:用戶界面響應開關
手勢識別器
手勢識別器:UIGestureRecognizer,用于識別手勢
手勢:有規律的觸摸
系統提供的手勢識別器這個抽象父類我們是不會直接使用,而是根據需求使用特定的子類手勢,系統提供的手勢類型:
- 輕拍:UITapGestureRecognizer
- 長按;UILongPressGestureRecognizer
- 旋轉:UIRotationGestureRecognizer
- 捏合:UIPinchGestureRecognizer
- 平移:UIPanGestureRecognizer
- 輕掃:UISwipeGestureRecognizer
- 屏幕邊緣輕掃:UIScreenEdgePanGestureRecognizer
創建方法
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap)];
添加方法
[self.imageView addGestureRecognizer:tap];
其他類同理
View的transform屬性
transform:能改變view的現實狀態,實現view的縮放、旋轉、平移
- 平移:CGAffineTransformMakeTranslation
- 縮放:CGAffineTransformMakeScale
- 旋轉;CGAffineTransformMakeRotation
方法1,此方法只能改變一次imageView的transform,即第二次觸發不生效
self.imageView.transform = CGAffineTransformMakeRotation(1.0);
方法2,此方法能多次觸發,意為在當前的transform上再次進行更改
self.imageView.transform = CGAffineTtansformRotation(self.imageView.transform,1.0);
其他方法同理