我想定义一个可拖动图像的子类,将其作为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/

10-12 03:36