1.ios當中常見的事件?
觸摸事件
加速計事件
遠端控制事件
2.什麼是響應者對象?
繼承了UIResponds的對象我們稱它為響應者對象 UIApplication、UIViewController、UIView都繼承 UIResponder,是以它們都是響應者對象,都能夠接收并處理事件.
3.為什麼說繼承了UIResponder就能夠處理事件?
原因:因為UIResponder内部提供了以下方法來處理事件.
如觸摸事件會調用以下方法:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event;
加速計事件會調用:
- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event;
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event;
- (void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event;
遠端控制事件會調 :
- (void)remoteControlReceivedWithEvent:(UIEvent *)event;
4.如何監聽UIView的觸摸事件?
想要監聽UIViiew的觸摸事件, 先第一步要自定義UIView, 因為隻有實作了UIResponder的事件方法才能夠監聽事件.
UIView的觸摸事件主要有:
1)單根或者多根手指開始觸摸view,系統會自動調用view的下方法.
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
2)單根或者多根手指在view上移動時,系統會自動調用view的下列方法 (随着手指的移動,會持續調用該方法,也就是說這個方法會調用很多次)
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
3)單根或者多根手指離開view,系統會自動調用view的下列方法
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
5.UIView拖拽思路?
1.定義UIView,實作監聽方法.
2.确定在TouchMove方法當中進行操作,因為使用者手指在視圖上移動的時候才需要移動視圖。
3.擷取目前手指的位置和上一個手指的位置.
4.目前視圖的位置 = 上一次視圖的位置 - 手指的偏移量
6.實作關鍵代碼:
當手指在螢幕上移動時持續調用
NSSet: 它的元素都是無序的.
NSArray: 它的是有順序的.
-(void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
1.擷取手指的對象
UITouch *touch = [touches anyObject];
2.擷取目前手指所在的點.
CGPoint curP = [touch locationInView:self];
3.擷取手指的上一個點.
CGPoint preP = [touch previousLocationInView:self];
//X軸方向偏移量
CGFloat offsetX = curP.x - preP.x;
//Y軸方向偏移量
CGFloat offsetY = curP.y - preP.y;
CGAffineTransformMakeTranslation:
//會清空上一次的形變,相對初始位置進行形變.
self.transform = CGAffineTransformMakeTranslation(offsetX,0);
//相對上一次的位置進行形變.
self.transform = CGAffineTransformTranslate(self.transform, offsetX, offsetY);
}
轉載于:https://www.cnblogs.com/zhoudaquan/p/5037386.html