蘋果開發 筆記(11)UITouch

2021-07-01 23:31:47 字數 3025 閱讀 2999

今天早上看了一下觸控,之前也了解了一下,想起前幾年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);

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);

今天發現觸控還要很多深入的地方。uiview 這個基礎類 有動畫的關聯,有層的關聯,有事件關聯,有觸控的關聯,有繪圖方面的關聯。想想一下uiview這個基類 承擔的責任真大。

蘋果開發 筆記(9)

今天書寫的內容不多一直在徘徊緊。早上接觸了git,申請了乙個賬號。以後的 都可以那邊託管一下。將昨天寫到的 模板也看了一下,原來自定義的 模板放置在這裡使用mac 前往資料夾功能即可跳轉到對於的資料夾 library developer xcode userdata codesnippetsxcod...

蘋果開發 筆記(17)

第一次在建立專案 勾選 coredata 的選項會生成一些coredata 的相關的api 類。這些類會記錄在 那裡。從 那裡找到獲取到 nsmanagedobjectcontext 的上下文。想起這個上下文,包括繪圖也有類似。先獲取到對應的類,下面就可以做出相應的事情。例如乙個是建立的動作,乙個獲...

蘋果開發 筆記(22)

今天繼續練習,重新去理解一下動態識別的應用。平時我們經常判斷乙個物件是不是所屬的類或者子類 可以通過is 的方法去完成。這個是swift提供的乙個方法。oc則提供豐富的方式來判斷,大部分功能整合在nsobject可見。可以說nsobject 責任非常重。方法名作用 ismemberofclass 檢...