我想定义一个可拖动图像的子类,将其作为UIImageView的子类,以分隔它们的外观(在子类上)以及用户界面对它们移动的位置(在viewcontroller上)的反应
myType1Image.h
@interface myType1Image : UIImageView { }
myType1Image.m
...
- (void) touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event {
// Retrieve the initial touch point
}
- (void) touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event {
// Move relative to the original touch point with some special effect
}
- (void) touchesEnded:(NSSet*)touches withEvent:(UIEvent*)event {
// Notify the ViewController ... here is my problem...how?
// would call GotIt on viewController for example
}
...
视图控制器实现
....
myType1Image *img = [[myType1Image alloc] initWithImage:[UIImage imageNamed:@"iOSDevTips.png"]];
img.center = CGPointMake(110, 75);
img.userInteractionEnabled = YES;
[subview addSubview:img];
...
- (void) gotIt:(id) (myType1Image *)sender{
if (CGRectContainsPoint( myimage.frame, [sender.center] )){
NSLog(@"Got IT!!!");
}
}
....
我不知道如何从myType1Image类(例如touchesEnded)通知ViewController。
我是在viewcontroller上编写所有代码的,但是我想使用子类来完成它,因此我可以将事件处理和图像的可视化与界面的真实功能分开。
因此,如果我有15张可拖动的图像,则不必猜测正在触摸的图像,也不必决定要应用的视觉效果。
可能吗?是错误的方法吗?
最佳答案
首先,类名称应始终以大写字母(MyType1Image
)开头。
创建一个MyType1ImageDelegate
协议,在该协议中声明图像视图发送到其委托(视图控制器)的委托方法。这些方法的第一个参数应始终为MyType1Image *
类型(以告知委托该消息来自哪个对象)。
您的MyType1Image
还需要一个id <MyType1ImageDelegate> delegate
属性。
当视图控制器创建图像视图时,它将自身设置为图像视图的委托。每当图像视图想要向视图控制器发送消息时,就让它将消息发送给委托。
关于cocoa-touch - 从自定义UIImageView子类通知ViewController,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4887119/