1

我的 ViewController 中有一个添加图像视图的方法。图像视图又被子类化为可拖动的。触摸时,子类会触发 ViewController 中的方法 (spawnImage) 以生成新图像。如果我从 ViewController 中的任何其他位置调用此方法,则正确绘制图像,但是如果调用源自子类,则调用该方法,NSLog 工作但图像不显示。

似乎我正在子类中创建 ViewController 的另一个实例,并最终将图像添加到该实例而不是实际显示的实例中。

我怎么能解决这个问题?

UIImageView 的子类:

- (void) touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event {
…
ViewController *viewController = [[ViewController alloc] init];
[viewController checkIfImageIsInOriginalPosition:selfCenter letterIndex: imgTag];
}

视图控制器.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];
}
4

1 回答 1

1

这段代码:

- (void) touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event {
ViewController *viewController = [[ViewController alloc] init];
[viewController checkIfImageIsInOriginalPosition:selfCenter letterIndex: imgTag];
}

..是错的。

大概这是子类中的代码,您的 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];
}
于 2012-05-13T19:25:24.850 回答