今天早上看了一下觸控,之前也了解了一下,想起前幾年air出來的時候7yue也寫過類似乙個觸控畫圖的案例。今天實現了乙個拖動的方塊的案例。本身而言寫這個目的是了解一下這個觸控是什麼回事。從繼承關係來講是uiview 繼承了uiresponder 響應類。uiresponder裡面有下面關於觸控的方法 ,每乙個觸控方法都有uievent 和uitouch集合物件的引數,底層裡面已經處理了通知到對於的入口裡面。只要在裡面實現它就可以完成乙個觸控動作。
- (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;
下面寫乙個測試,首先建立乙個myview類,這個類直接繼承uiview類,並新增兩個屬性,分別記錄觸控的點和中心點。
#import
#import
@inte***ce
myview : uiview
@property (nonatomic) cgpoint point;
@property (nonatomic) cgpoint originalpoint;
@end
接下來,實現四個方法行為。為每乙個行為新增不同的方法。當觸控首次發生的時候,會響應touchebegan的方法。該方法引數當中含有乙個集合,集合裡面包含uitouch物件。這個物件幫我們處理工作。有了它的幫助,我們可以在它裡面的方法
-(cgpoint)locationinview:(uiview *) view ;獲取返回的點。有了它的出現就可以知道第一次觸控該點的資料。這個不難理解,手指觸控了 ,而當下的觸控物件處理了幫我們記錄的相應的位置點。
觸發首次後,當我們產生移動的時候就會觸發下面的方法,有了它就可以計算出拖動後的位移。
- (void)touchesmoved:(nsset )touches withevent:(uievent )event
基本計算方法,移動後的位置 減去上點的位置 +原本的中心。這樣圖形就移動起來。
同理 結束觸控後,手指鬆開了該結束方法也相應結束了。
#import "myview.h"
@implementation myview
- (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
@end
接下來,我們在single view apllication 的viewcontroller 裡面去例項化myview 物件。
@inte***ce
viewcontroller ()
@property (nonatomic,strong) myview *subview;
@end
self
.subview = [[myview alloc]init];
self
.subview
.frame =(cgrect);
self
.subview
.backgroundcolor =[uicolor greencolor];
[self
.view addsubview:self
.subview];
最後執行測試
早上遇到乙個除錯小問題,nslog怎樣輸出結構體的內容?突然對nslog有一番的不理解。
我想當然以為這樣子就可以處理了,當xcode 發出警告的時候,我就蒙住了。
nslog(@"中心點%@",self
.center);
結構體輸出還有一些陪襯的方法,第一次接觸有點彆扭。乙個不就好了,非得搞那麼多轉換?
nslog(@"中心點%@",nsstringfromcgpoint(self
.center));
引用了下面的方法**,不知道是不是記那麼多。
uikit_extern nsstring *nsstringfromcgpoint(cgpoint point);今天發現觸控還要很多深入的地方。uiview 這個基礎類 有動畫的關聯,有層的關聯,有事件關聯,有觸控的關聯,有繪圖方面的關聯。想想一下uiview這個基類 承擔的責任真大。uikit_extern nsstring *nsstringfromcgvector(cgvector vector);
uikit_extern nsstring *nsstringfromcgsize(cgsize size); uikit_extern
nsstring *nsstringfromcgrect(cgrect rect); uikit_extern nsstring
*nsstringfromcgaffinetransform(cgaffinetransform transform); uikit_extern nsstring *nsstringfromuiedgeinsets(uiedgeinsets insets);
uikit_extern nsstring *nsstringfromuioffset(uioffset offset);
蘋果開發 筆記(9)
今天書寫的內容不多一直在徘徊緊。早上接觸了git,申請了乙個賬號。以後的 都可以那邊託管一下。將昨天寫到的 模板也看了一下,原來自定義的 模板放置在這裡使用mac 前往資料夾功能即可跳轉到對於的資料夾 library developer xcode userdata codesnippetsxcod...
蘋果開發 筆記(17)
第一次在建立專案 勾選 coredata 的選項會生成一些coredata 的相關的api 類。這些類會記錄在 那裡。從 那裡找到獲取到 nsmanagedobjectcontext 的上下文。想起這個上下文,包括繪圖也有類似。先獲取到對應的類,下面就可以做出相應的事情。例如乙個是建立的動作,乙個獲...
蘋果開發 筆記(22)
今天繼續練習,重新去理解一下動態識別的應用。平時我們經常判斷乙個物件是不是所屬的類或者子類 可以通過is 的方法去完成。這個是swift提供的乙個方法。oc則提供豐富的方式來判斷,大部分功能整合在nsobject可見。可以說nsobject 責任非常重。方法名作用 ismemberofclass 檢...