我正在尝试编写一个简单的程序,它可以拍摄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
答案 0 :(得分: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;
你的代表已经完成了。