我的ViewController中有一个添加图像视图的方法。图像视图又被子类化为可拖动的。触摸时,子类触发ViewController中的方法(spawnImage)以生成新图像。如果我在ViewController中的任何其他位置调用此方法,则会正确绘制图像,但是如果调用源自子类,则调用该方法,NSLog可以工作,但图像不会显示。
似乎我在子类中创建ViewController的另一个实例,最后将图像添加到该实例而不是实际显示的实例。
我怎么解决这个问题?
UIImageView的子类:
- (void) touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event {
…
ViewController *viewController = [[ViewController alloc] init];
[viewController checkIfImageIsInOriginalPosition:selfCenter letterIndex: imgTag];
}
ViewController.m:
-(void)checkIfImageIsInOriginalPosition:selfCenter letterIndex: imgTag {
…
else {
[self spawnImage];
}
}
-(void)spawnImage {
…
NSLog(@"Received");
SubClass *subClass = [[SubClass alloc] initWithFrame:frame];
[subClass setImage:image];
[self.view addSubview:subClass];
}
答案 0 :(得分:1)
此代码:
- (void) touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event {
ViewController *viewController = [[ViewController alloc] init];
[viewController checkIfImageIsInOriginalPosition:selfCenter letterIndex: imgTag];
}
..错了。
可能这是Subclass中的代码,是UIImageView的子类,当用户点击它时会被调用。
您不应该分配/初始化新的视图控制器。相反,您应该在SubClass UIImageView子类中设置“owningViewController”属性,并在创建SubClass实例时设置该属性:
-(void)spawnImage
{
…
NSLog(@"Received");
SubClass *subClass = [[SubClass alloc] initWithFrame:frame];
owningViewController = self;
[subClass setImage:image];
[self.view addSubview:subClass];
}
然后你的SubClass类的touchesBegan方法将如下所示:
- (void) touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event
{
…
[self.owningViewController checkIfImageIsInOriginalPosition:selfCenter
letterIndex: imgTag];
}