0

あるビューから別のビューに移動するときにタッチを検出できるように、このスタックオーバーフロー エントリを適用しました。

サブビューは実際にタッチを検出します。しかし、私はもっと何かをしています。タッチを検出したビューを親ビューから削除し、新しいビューを親ビューに追加する必要があります。だから、私はこのようなものを持っています:

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{
    UITouch *touch = [[event allTouches] anyObject];
    CGPoint touchLocation = [touch locationInView:self.contentView];

    for (UIView *view in self.contentView.subviews)
    {
        if ([view isKindOfClass:[MyCustomView class]] &&
            CGRectContainsPoint(view.frame, touchLocation))
        {
            [view removeFromSuperview];
            UIView *aNewView = [[[UIView alloc] initWithFrame:someFrame] autorelease];
            [self.contentView addSubview:aNewView];
        }
    }
}

if ステートメントを通過した後、アプリはタッチ ムーブに応答しません。何が問題だと思いますか?これが原因でした: [view removeFromSuperview]?

4

1 に答える 1

0

これを試して:

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{
    UITouch *touch = [[event allTouches] anyObject];
    CGPoint touchLocation = [touch locationInView:self.contentView];

    NSArray *subviews = [self.contentView.subviews copy];
    for (UIView *view in subviews)
    {
        if ([view isKindOfClass:[MyCustomView class]] &&
            CGRectContainsPoint(view.frame, touchLocation))
        {
            [view removeFromSuperview];
            UIView *aNewView = [[[UIView alloc] initWithFrame:someFrame] autorelease];
            [self.contentView addSubview:aNewView];
        }
    }
}

問題は、配列を反復しながら配列を変更していることだと思います。

于 2013-03-19T07:37:40.083 に答える