2011-04-08 76 views
0

爲了處理hitTest和Touches動作,我創建了UIView的子類,因爲UIView是UIScrollview的子視圖,我需要UIView和UIScrollView都是可拖動的。將名稱傳遞給UIView的子類

我有95%的工作 - 子類UIView完美的作品,如果我只是設置背景顏色 - 但如果我設置與透明的圖像子視圖它並不總是響應。我對此有一些想法,所以這不是問題。

我的問題是,因爲我有UIScrollview上的子類UIView的多個實例,我怎麼知道哪一個被拖動。

在我以前使用的應用程序中;

if ([touch view] == blah) {   
//do something; 
} 
else if ([touch view] == fred) { 
//do nothing; 
} 

但這個坐在我的主要應用程序.m文件,這是不錯的方法等等,並在viewDidLoad中佛瑞德都在這裏創建的,但在我的代碼的觸摸事件在子類中被捕獲,他們不知道關於等等和弗雷德。

所以1)我如何讓子類瞭解項目我已經添加了 - 我如何通過向任一則hitTest或在的touchesBegan子通過項的名稱
2) - - 或或 -
3)是否有一行代碼來獲取當前項目的名稱

任何幫助非常感謝。

回答

0

所以對於誰比誰任何問題也有同樣的問題。

我發現了一個簡單的解決方案:

以我viewDidLoad中當我添加子類的子視圖,我只是添加在線路
customView1.tag = 111;

然後在子類中我接觸的方法,我可以只使用內:
如果([觸摸視圖] .TAG == 111){

簡單! :)

0

好吧,這是如何使用NotificationCenter輕鬆實現的。

需要知道哪個子視圖被拖動的對象可以偵聽名爲「SubviewIsDragged」的通知,每個子視圖可以發送通知「SubviewIsDragged」作爲參數傳遞自己。

這是代碼:

對象,需要了解一下它拖動寄存器進行的以下init方法:

-(void)subviewIsDragged:(NSNotification *)notification 
{ 
    //Here you can get your subclass of UIView 
    UIView* view = [notification object]; 

    // do what ever you want with the object 
} 
:那拖着已被發現後執行動作

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(subviewIsDragged) name:@"SubviewIsDragged" object:nil]; 

方法

現在在您的UIView子類中,將以下內容添加到您的拖動方法中:

[[NSNotificationCenter defaultCenter] postNotificationName:@"SubviewIsDragged" object:self]; 

請注意,您傳遞對象「self」,但您可以傳遞任何其他想要的對象,如NSString ID。

希望得到這個幫助。

0

添加panGesture識別到你的子視圖類

UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panPiece:)]; 
    [panGesture setMaximumNumberOfTouches:2]; 
    [panGesture setDelegate:self]; 
    [self addGestureRecognizer:panGesture]; 

使用此代碼的翻譯,你會不會有拖錯誤的觀點

- (void)panPiece:(UIPanGestureRecognizer *)gestureRecognizer 
{ 

[self adjustAnchorPointForGestureRecognizer:gestureRecognizer]; 

if ([gestureRecognizer state] == UIGestureRecognizerStateBegan || [gestureRecognizer state] == UIGestureRecognizerStateChanged) { 

    CGPoint translation = [gestureRecognizer translationInView:[self superview]]; 

    self.center = CGPointMake([self center].x + translation.x, [self center].y + translation.y); 
    [gestureRecognizer setTranslation:CGPointZero inView:[self superview]]; 
} 
}