1

custom をドラッグするための簡単なテスト ケースを用意して、GitHub にチェックインしましたUIView

アプリのスクリーンショット

それはうまく機能し、ドラッグは次のようにTile.mに実装されます。

- (void) touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event
{
    UITouch *touch = [touches anyObject];
    CGPoint location = [touch locationInView:self];
    CGPoint previous = [touch previousLocationInView:self];
    self.frame = CGRectOffset(self.frame,
                              (location.x - previous.x),
                              (location.y - previous.y));
}

ただし、実際のゲームUIScrollViewにはタイルが大きすぎます (いずれにせよ、ゲーム ボードをズームしたら、タイルのスケーリングを調整する必要があります)。

アプリのスクリーンショット

だから私はUIView呼び出して私のカスタムを縮小します

tile.transform = CGAffineTransformMakeScale(.5, .5);

サイズは変更されますが、タイルは必要に応じて「2 倍の速さで」突然ドラッグされます。

アプリのスクリーンショット

おそらくコード(上記)を調整する必要がありますが、操作touchesMovedによって何が壊れたのかわかりませんか?transform

4

1 に答える 1

0

気にしないでください、私は解決策を見つけました:

- (void) touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event
{
    UITouch *touch = [touches anyObject];
    CGPoint location = [touch locationInView:self];
    CGPoint previous = [touch previousLocationInView:self];

    if (!CGAffineTransformIsIdentity(self.transform)) {
        location = CGPointApplyAffineTransform(location, self.transform);
        previous = CGPointApplyAffineTransform(previous, self.transform);
    }

    self.frame = CGRectOffset(self.frame,
                              (location.x - previous.x),
                              (location.y - previous.y));
}
于 2014-03-06T12:25:40.023 に答える