gpt4 book ai didi

cocoa-touch - 从自定义 UIImageView 子类通知 ViewController

转载 作者:行者123 更新时间:2023-11-28 17:47:21 24 4
gpt4 key购买 nike

我想定义一类可拖动图像的 UIImageView 子类,将它们的外观(在子类上)和用户界面对它们移动位置的 react (在 View Controller 上)分开

myType1Image.h

@interface myType1Image : UIImageView { } 

我的Type1Image.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
}
...

View Controller 实现

....
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!!!");
}
}

....

对于 touchesEnded(例如),我无法弄清楚如何从 myType1Image 类通知 ViewController。我在 viewcontroller 上编写了所有代码,但我想使用子类来完成它,这样我就可以将事件处理和图像的可视化与界面的实际功能分开。因此,如果我有 15 个可拖动图像,我不必猜测触摸到的图像,也不必决定要应用的视觉效果。

这可能吗?是错误的方法吗?

最佳答案

首先,类名应始终以大写字母 ( MyType1Image) 开头。

创建一个 MyType1ImageDelegate您在其中声明 ImageView 发送给其委托(delegate)( View Controller )的委托(delegate)方法的协议(protocol)。这些方法的第一个参数应始终为 MyType1Image * 类型(告诉委托(delegate)人消息来自哪个对象)。

你的 MyType1Image还需要一个 id <MyType1ImageDelegate> delegate属性(property)。

当您的 View Controller 创建 ImageView 时,它会将自己设置为 ImageView 的委托(delegate)。每当 ImageView 想要向 View Controller 发送消息时,您可以让它将消息发送给委托(delegate)。

关于cocoa-touch - 从自定义 UIImageView 子类通知 ViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4887119/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com