我正在尝试写一个简单的程序,采取5个图像,并允许您从屏幕底部拖动它们,并捕捉到顶部的其他5个图像在任何你喜欢的顺序。我已经用一个新的类对UIImageView进行了子类化,并添加了触摸开始,触摸移动和触摸结束。然后,在我的主视图控制器上,我放置图像,并将它们的类设置为我创建的新子类。这个动作做得很好,实际上我是在NSLogging类中的坐标。
问题是,我正在尝试弄清楚如何从自定义类的触摸端获得CGpoint信息,并让它调用我的主视图控制器中的一个函数,该函数包含图像对象,以便我可以测试图像是否在另一个图像上。并将其移动到它所在的图像的中心(捕捉到它上)。
下面是我的自定义类m文件中的代码。我的视图控制器基本上是空的,有一个包含10个图像视图的xib文件,其中5个被设置为此类,5个是普通图像视图。
#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发布于 2011-12-04 15:33:32
您可以编写一个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;你的委派就完成了。
https://stackoverflow.com/questions/8373940
复制相似问题