0

基本的には、画像をタッチして中心を中心に 90 度回転させたいと考えています。画像をドラッグして移動します (回転せずに)。

- (void) onImageTouched:(SPTouchEvent *)event
{
    SPImage *img = (SPImage *)event.target;
    SPTouch *drag = [[event touchesWithTarget:self andPhase:SPTouchPhaseMoved] anyObject];
    SPTouch *touch = [[event touchesWithTarget:self andPhase:SPTouchPhaseBegan] anyObject];
    float offsetX, offsetY;
    if(touch){
        SPPoint *initial = [touch locationInSpace:self];
        offsetX = initial.x - img.x;
        offsetY = initial.y - img.y;
    }
    if (drag) {
        SPPoint *dragPosition = [drag locationInSpace:self];
        NSLog(@"Touched (%f %f)",dragPosition.x, dragPosition.y);
        //img.x = dragPosition.x - offsetX;
        //img.y = dragPosition.y - offsetY;

    }
    else{
        img.pivotX = img.width / 2.0f;
        img.pivotY = img.height / 2.0f;
        NSLog(@"Rotated aboout(%f %f)",img.pivotX,img.pivotY);
        //img.rotation = SP_D2R(90);
    }

}

上記は私のコードです。

ドラッグすると動きますが、画像の位置がポインターからかなり離れています。また、ドラッグの開始時と終了時に画像が回転します。

タップすると消えます。(たぶん画面の外に移動したり回転したりします)

助言がありますか?

4

1 に答える 1

0

わかりました、私はこのようなことをします:

- (void) onImageTouched:(SPTouchEvent *)event
{
    SPImage *img = (SPImage *)event.target;
    SPTouch *drag = [[event touchesWithTarget:self andPhase:SPTouchPhaseMoved] anyObject];
    SPTouch *touch = [[event touchesWithTarget:self andPhase:SPTouchPhaseBegan] anyObject];
    SPTouch *endTouch = [[event touchesWithTarget:self andPhase:SPTouchPhaseEnded] anyObject];
    float offsetX, offsetY;    
    static BOOL dragging = NO;
    if(touch){
        dragging = NO;
    } else if (drag) {
        dragging = YES;
        SPPoint *dragPosition = [drag locationInSpace:self];
        NSLog(@"Touched (%f %f)",dragPosition.x, dragPosition.y);
        img.x = dragPosition.x;
        img.y = dragPosition.y;
    }
    else if (endTouch) {
        if (!dragging) {
            img.pivotX = img.width / 2.0f;
            img.pivotY = img.height / 2.0f;
            NSLog(@"Rotated aboout(%f %f)",img.pivotX,img.pivotY);
            img.rotation = SP_D2R(90);
        }
    }

}

このバリアントは、ドラッグ中のオフセットの問題と、ドラッグするととにかく回転するという事実を解決するはずです。

メソッド(ドラッグ)の静的変数に注意してください。実装でプライベート変数として配置した方がよいでしょう(この方法で時間を節約できました;))。

私はこのコードをテストしていませんが、アイデアは明確なはずです (期待しています)。

よろしく

于 2013-09-25T15:45:32.533 に答える