1

ここで検索したところ、userInteractionEnabled プロパティをオンにするようにという回答がたくさんありました。私はすでにそれをしました。

サブビューをプログラムで作成します (Interface Builder ではありません)。サブビューは UIView のカスタム サブクラスです (PieceSuperClass と呼ばれます)。

私が欲しいのは、次のように見えるものだけです

UITouch *touch = [touches anyObject];
CGPoint currentPosition = [touch locationInView:self.view];

UIView *hitView = [self.view hitTest:currentPosition withEvent:event];

if ([hitView isKindOfClass:[PieceSuperClass class]]) {
    return hitView;
}

何らかの理由でhitView isKindOfClass UIImageView、私はそれをPieceSuperClass. 「PieceSuperClass」は UIImageView のサブクラスです。

// Draw proper piece 
UIImage *pieceImage = [UIImage imageNamed:[NSString stringWithFormat:@"%@%@.png", pieceColor, pieceName]]; 
PieceSuperClass *pieceImageView = [[PieceSuperClass alloc] initWithFrame:CGRectMake(0, 0, 39, 38)]; 
pieceImageView.image = pieceImage; 
pieceImageView.identifier = [NSString stringWithFormat:@"%@%@%@", pieceColor, pieceName, pieceNumber]; 
pieceImageView.userInteractionEnabled = YES; 
[boardView addSubview:pieceImageView];
4

3 に答える 3

0

理解した!

- (id)whichPieceTouched:touches withEvent:event
{
UITouch *touch = [touches anyObject];
CGPoint currentPosition = [touch locationInView:self.view];

for (int i = 0; i < [piecesArray count]; i++) {
    if (CGRectContainsPoint([[piecesArray objectAtIndex:i] frame], currentPosition)) {
        return [piecesArray objectAtIndex:i];
        }
    }
}

私には1つの長引く問題がありますが、それは常に約20ピクセル下のオブジェクト(または次のオブジェクト)を選択しているようです。

于 2012-12-18T00:36:46.657 に答える
0

現在の位置で間違ったビューを追跡していると思います。PieceSuperClass が self.view のサブビューである場合、おそらく次のように追跡する必要があります。

CGPoint currentPosition = [touch locationInView:self.view.subviews];
于 2012-12-17T22:11:45.990 に答える
0

それはUITouch Documentationからのものです:

タッチが最初に発生したビュー。(読み取り専用)

@property(非アトミック、読み取り専用、保持) UIView *view

したがって、どのビューが触れられたかを知ることができ、これを行うだけです:

UIView *hitView = touch.view;
if ([hitView isKindOfClass:[PieceSuperClass class]]) {
    return hitView;
}
于 2012-12-17T22:43:29.160 に答える