多點觸控及乙個華麗的Demo

2021-09-30 12:54:04 字數 2114 閱讀 1592

1.觸控過程

一次完整的觸控過程,會經歷3個狀態:

觸控開始:

-(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

2.觸控過程的理解

a.4個觸控事件處理方法中,都有nsset *touches和uievent *event兩個引數。一次完整的觸控過程中,只會產生乙個事件物件,4個觸控方法都是同乙個event引數;

b.如果兩根手指同時觸控乙個view,那麼view只會呼叫一次touchesbegan:withevent:方法,這時touches引數中裝著2個uitouch物件;

c.如果這兩根手指一前一後分開觸控同乙個view,那麼view會分別呼叫2次touchesbegan:withevent:方法,並且每次呼叫時的touches引數中只包含乙個uitouch物件;

d.根據touches中uitouch的個數可以判斷出是單點觸控還是多點觸控;

e.注意: 一般預設情況下, 控制項都不支援多點觸控(為了提高效能), 所以需要手動設定乙個uiview 允許多點觸控!

3. 多點觸控的乙個華麗demo

@inte***ceczview ()

//定義乙個陣列存放image

@property(nonatomic, strong) nsarray* images;

@end

@implementationczview

//懶載入

-(nsarray*)images

if(!_images) {

_images = @[ [uiimageimagenamed:@"spark_green"], [uiimageimagenamed:@"spark_red"] ];

return_images;

//手指按下螢幕

-(void)touchesbegan:(nsset*)touches withevent:(uievent*)event

[self addspark:touches];

//手指在螢幕上移動

-(void)touchesmoved:(nsset*)touches withevent:(uievent*)event

[self addspark:touches];

-(void)addspark:(nsset*)touches

inti = 0;

//獲取觸控物件

for(uitouch* t in touches) {

// 獲取手指的位置

cgpoint p = [t locationinview:t.view];

// 建立乙個imageview

uiimageview* imageview = [[uiimageviewalloc] initwithimage:self.images[i]];

// 讓imageview的center等於手指的位置

imageview.center = p;

// 新增到控制器的view上

[selfaddsubview:imageview];

[uiview animatewithduration:2

animations:^{

imageview.alpha = 0;

completion:^(bool finished) {

[imageview removefromsuperview];

i++;

@end

輸出結果:

多點觸控時代來了,第乙個是什麼呢

是乙個地形系統和多點觸控的地圖編輯器,那將是非常舒服的,和滑鼠完全不同的操作體驗。關於地形,唉。windows phone 7 開放shader還遙遙無期,用vertextexture的方案先放在那裡。實現乙個適合cpu的地圖方式,比如war3那樣,可憐的war3,剛剛才偷了守望者的模型動畫,又開始...

aop的乙個小demo

註解方式通知配置增強 切入點及前置通知,後置通知,返回通知,異常通知,環繞通知的配置 aspect service publicclasslogaspect before dolog publicvoiddobefore after dolog publicvoiddoafter 核心業務正常結束時...

乙個JAVA死鎖的Demo

死鎖的條件肯定是兩個鎖以上時,才會 發生死鎖,以下demo是模擬的兩個鎖,通過兩個執行緒分別呼叫兩個方法,這兩個方法加鎖的順序正好相反,從而造成兩個執行緒相互等待,互不釋放鎖 package com.threaddemo public class deadlocksample private voi...