2

スーパービューでいくつかの機能を実行したい小さなゲームに取り組んでいます..スーパービューはカスタムクラス、つまりリフレクションビューです..ユーザーがビューを移動したときに反射を非表示にしたい..

これが私がやったことです.. (詳細については、コードのコメントを確認してください)

-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    [super touchesBegan:touches withEvent:event];
    NSLog(@"Touch Began");
    frame2 = dragImageView1.frame;
     NSLog(@"uiview origin: %@", NSStringFromCGPoint(frame2.origin));
     // here i want to get the superview Programatically because i will work on multiple such views and [touch view].superview does not give me the ReflectionView Functions
     [_reflectionView1 hideReflection];
    UITouch *touch = [[event allTouches] anyObject];


      if ([[touch view] tag]!=0) {
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
        [[touch view] setFrame:CGRectMake(frame2.origin.x, frame2.origin.y, 125.0 * 1.1, 135.0 * 1.1)];
    } else {
        [[touch view] setFrame:CGRectMake(frame2.origin.x, frame2.origin.y, 52.08 * 1.1, 63.28 * 1.1)];
    }
        [self.view bringSubviewToFront:[touch view].superview]; 
      }
}
4

1 に答える 1

3

0x7fffff で述べたように、スーパー ビューをカスタム ビューにキャストする必要があります。お気に入り

[(ReflectionView *)touch.view.superview updateReflection];

スーパービューが常に ReeflectionView である場合にこれを呼び出す場所が確実な場合は、これを使用してください。そうしないと、スーパービューがリフレクションではない場合にこれを使用すると、アプリケーションがクラッシュします。次に、これをコードに追加します

if(touch.view.superview isEqual:[ReflectionView class])
{
   [(ReflectionView *)touch.view.superview updateReflection];
}
于 2013-06-23T08:27:58.480 に答える