2011-12-04 27 views
0

我試圖編寫一個簡單的程序,需要5個圖像,並允許您從屏幕底部拖動​​它們,並按照您喜歡的任何順序將它們捕捉到頂部的5個其他圖像。我已經將UIImageView分類爲一個新類,並添加了觸動開始,觸動移動並觸動結束。然後在我的主視圖控制器上放置圖像並將它們的類設置爲我創建的新子類。該運動很有效,其實我是NSLogging自定義類中的座標。UIImageview和TouchesEnded事件

問題是我想弄清楚如何從觸摸信息結束自定義類,並讓它調用我的主視圖控制器中的圖像對象的功能,所以我可以測試是否或者圖像不在另一個圖像上。並將其移動到以圖像爲中心(對齊它)。

這裏是我的自定義類m文件中的代碼。我的看法控制器與其中5個被設置爲該類和5是正常的圖像視圖10個圖像視圖的廈門國際銀行文件基本上是空的..

#import "MoveImage.h" 


CGPoint EndPoint; 

@implementation MoveImage 


- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    startPoint = [[touches anyObject] locationInView:self]; 
    } 

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 
    CGPoint newPoint = [[touches anyObject] locationInView:self.superview]; 

    newPoint.x -= startPoint.x; 
    newPoint.y -= startPoint.y; 
    CGRect frm = [self frame]; 
    frm.origin = newPoint; 
    [self setFrame:frm]; 
} 

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{ 
    UITouch *end = [[event allTouches] anyObject]; 
    EndPoint = [end locationInView:self]; 
    NSLog(@"end ponts x : %f y : %f", EndPoint.x, EndPoint.y); 

} 

@end 

回答

0

你可以寫一個MoveImageDelegate協議,您的應用程序控制器將然後執行。這個協議將會有你的MoveImage類可以調用的方法來獲取它的信息。

在你的頭文件(如果你不知道怎麼寫的協議)

@protocol MoveImageDelegate <TypeOfObjectsThatCanImplementIt> // usually NSObject 
// methods 
@end 

,那麼你可以聲明ID類型的實例變量,但仍然有編譯器識別出該變量響應你的委託選擇器(這樣你可以編寫沒有這些惱人的警告)。 喜歡的東西:

@interface MoveImage : UIImageView 
{ 
id <MoveImageDelegate> _delegate; 
} 

@property (assign) id <MoveImageDelegate> delegate; 

最後:

@implementation MoveImage 

@synthesize delegate = _delegate; 

而且你的委託完成。

+0

此外,我只是想,如果有一個更簡單的方法來通過添加接觸開始,移動和結束事件到我的主視圖控制器,那很好。只是不確定最好的方法是什麼。也許創建一個uiimage視圖的自定義子類是不是要走的路? – TommyT39

+0

UIView在響應鏈中,這意味着它會收到touchesBegan等事件,你的視圖控制器不會。最好的方式是告訴你的視圖它可以「粘」到什麼位置,然後在touchesBegan等方法中實現它 –