編輯:關於Android編程
(1)事件類型
觸摸事件(觸摸手機屏幕)
運動事件(如微信的搖一搖)
遠程控制事件(如藍牙)
(2)響應者類通過復寫以下方法,可以監聽觸摸事件
//當一個或多個手指觸碰屏幕時
- (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;
(3)UITouch觸摸對象
當用戶觸摸視圖時,調用視圖如下方法:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
NSInteger tapNumber = [touch tapCount];
}
當用戶觸摸屏幕時,事件會被封裝成一個event實例,
包含了觸摸事件相關的信息,event實例包含著若干個UITouch實例,一個touch表示一個手指.
UITouch類中的常用屬性:
window:觸摸時產生所處的窗口 view::觸摸產生時所在的視圖
<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjwvYmxvY2txdW90ZT4NCjxwPjxjb2RlPlVJVG91Y2jA4NbQtcSzo9PDt723qDo8L2NvZGU+PC9wPg0KPHByZSBjbGFzcz0="brush:java;">
tapCount:tapCount表示短時間內輕擊屏幕的次數.(可根據該屬性判斷單擊,雙擊或更多)
phase:觸摸事件在屏幕上的一個周期,即觸摸開始,觸摸點移動,觸摸結束,還有中途取消,
phase可以查看當前觸摸事件在一個周期中所處的狀態, phase的類是 UITouchPahse,其枚舉型包含:
UITouchPahseBegan(觸摸開始) UITouchPahseMoved(接觸點移動)
UITouchPahseStationary(接觸點無移動)
UITouchPahseEnded(觸摸結束)//函數返回一個CGpoint類型的值,表示觸摸在view上的位置,返回的位置是針對view的坐標系 - (CGPoint)locationInView:(UIView *)view CGPointview view; //記錄了前一個坐標值 - (CGPoint)previousLocationInView:(UIView *)view CGPoint ;
2.事件傳遞的過程
事件的傳遞: 從事件發生到其處理的對象,傳遞要經過特殊的一 段過程。當用戶點擊設備屏 幕時,iOS捕捉到一系 列的觸摸,將其打包到UIEvent對象中並放置到應 用程序 活動事件隊列中。UIApplication對象 從事件隊列中取出最前面的事件並將其分 發。通 常,其發送事件給應用程序的主窗口——UIWindow 實例,再由窗口對 象發送事件給『第一響應者 (觸摸的視圖)』處理。
3.響應者鏈的基本概念
響應者對象是一個能接收並處理事件的對象。 UIResponser是所有響應者對 象的基類。該基 類定義了一系列編程接口,不但為事件處理進行服 務而且還提 供了通用的響應行為處理。 UIApplication, UIView(包括UIWindow), UIViewController都直接或間接的繼承自 UIResponser,所有的這些類的實例 都是響應者 對象。
事件響應者鏈:
當用戶與視圖交互時,將會 消息傳遞給視圖控制器,如果 不存在控制器,傳遞給父視圖.
如果不處理該消息,則繼續 將消息向上傳遞
最上層的視圖如果也不處理, 將事件交予Window對象
最後交由UIApplication實例, 如果不處理,丟棄事件
事件分發和響應過程如下圖:
事件的攔截:
userInteractionEnable = NO;
hidden = YES;
alpha = 【0——0.01】范圍
4.手勢識別
UIGestureRecognizer: UIGestureRecognizer類,用於檢測、識別用戶 使用設備時所用的手勢。它是一 個抽象類,定義了 所有手勢的基本行為。以下是 UIGestureRecognizer子類,用 於處理具體的用 戶手勢行為:
UITapGestureRecognizer(輕擊) UIPinchGestureRecognizer(捏合) UIPanGestureRecognizer(平移) UISwipeGestureRecognizer(輕掃) UIRotationGestureRecognizer(旋轉) UILongPressGestureRecognizer(長按)
//1 單擊 UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapAction:)]; [imageV addGestureRecognizer:tap]; //2 雙擊 UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(doubleTapAction:)]; doubleTap.numberOfTapsRequired = 2; [imageV addGestureRecognizer:doubleTap]; //雙擊失敗了才算單擊(雙擊成功就是雙擊) [tap requireGestureRecognizerToFail:doubleTap]; //3 長按 //allowableMovement:允許抖動的范圍 UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(longPressAction:)]; [imageV addGestureRecognizer:longPress]; //4 輕掃 UISwipeGestureRecognizer *swipe = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeAction:)]; //屬性:設置輕掃的方向(默認 右) // swipe.direction = UISwipeGestureRecognizerDirectionRight; [imageV addGestureRecognizer:swipe]; //5 移動 UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panAction:)]; //輕掃和移動的沖突,一旦有沖突,默認移動 //輕掃失敗算移動 (輕掃成功就是輕掃) [pan requireGestureRecognizerToFail:swipe]; //6 旋轉 UIRotationGestureRecognizer *rotation = [[UIRotationGestureRecognizer alloc]initWithTarget:self action:@selector(rotationAction:)]; [imageV addGestureRecognizer:rotation]; //7 捏合 UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(pinchAction:)]; [imageV addGestureRecognizer:pinch];
以上方法的實現:
-(void)pinchAction:(UIPinchGestureRecognizer*)pinch{ /*屬性 scale:縮放的大小比例 velocity:縮放的速度 */ if (pinch.state ==UIGestureRecognizerStateChanged) { NSLog(@"一直捏合"); CGFloat pScale =pinch.scale; pinch.view.transform = CGAffineTransformMakeScale(pScale, pScale); }else if (pinch.state == UIGestureRecognizerStateEnded){ NSLog(@"捏合結束"); [UIView animateWithDuration:0.2 animations:^{ pinch.view.transform =CGAffineTransformIdentity; }]; } } -(void)rotationAction:(UIRotationGestureRecognizer*)rotation{ /* rotation:旋轉的弧度 角度:0~360 弧度:0~2π velocity:旋轉的速度 */ if (rotation.state == UIGestureRecognizerStateChanged) { NSLog(@"一直旋轉"); CGFloat angle = rotation.rotation; rotation.view.transform = CGAffineTransformMakeRotation(angle); }else if (rotation.state == UIGestureRecognizerStateEnded){ NSLog(@"旋轉結束"); [UIView animateWithDuration:0.2 animations:^{ rotation.view.transform = CGAffineTransformIdentity; }]; } } -(void)panAction:(UIPanGestureRecognizer*)pan{ // NSLog(@"移動..."); //設置當前位置的坐標(相對 起始點 ) CGPoint p1 =[pan translationInView:imageV]; NSLog(@"p1 = %@",NSStringFromCGPoint(p1)); //移動點的速度 // CGPoint v1 = [pan velocityInView:imageV]; // NSLog(@"v1 = %@",NSStringFromCGPoint(v1)); //設置當前位置 // CGPoint p2 = CGPointMake(100, 100); // [pan setTranslation:p2 inView:imageV]; } -(void)swipeAction:(UISwipeGestureRecognizer*)swipe{ NSLog(@"輕掃"); } -(void)longPressAction:(UILongPressGestureRecognizer*)longPress { // NSLog(@"長按"); if (longPress.state == UIGestureRecognizerStateBegan) { NSLog(@"長按開始"); }else if (longPress.state ==UIGestureRecognizerStateEnded){ NSLog(@"長按結束"); } } -(void)tapAction:(UITapGestureRecognizer*)tap{ NSLog(@"單擊"); } -(void)doubleTapAction:(UITapGestureRecognizer*)tap{ NSLog(@"雙擊"); }
GreenDao是Android當中的高性能ORM框架。(其他的有OrmLite等) 同時GreenDao還有一個子項目為GreenDao Code
1.生命周期場景演示 : 切換到該Fragment11-29 14:26:35.095: D/AppListFragment(7649): onAttach11-29 1
一、實現效果: 最近在項目中需要做類似於上圖顯示的效果,裡面的數字和稱謂是動態獲取的,對於這種顯示效果,有如下兩種解決方案來處理: (1)通過代碼動態設置TextVie
!學習自菜鳥教程-移動端-Android圖片如下 一、底部導航欄實現1、TextView 圖片和文字的變換,在drawable 中新建文件圖片:tav_re