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];
}

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];
}
4

1 に答える 1

1

このコード:

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

..間違っている。

おそらくこれは、UIImageView のサブクラスであるサブクラス内のコードであり、ユーザーがタップすると呼び出されます。

新しいView Controllerを割り当て/初期化しないでください。代わりに、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 に答える