Воробей: Как иметь разные события для прикосновения и перетаскивания

В основном я хочу коснуться изображения, чтобы повернуть его вокруг центра на 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);
    }

}

Выше мой код.

Когда я перетаскиваю его, он перемещается, но положение изображения довольно далеко от моих указателей. Кроме того, в начале и в конце перетаскивания изображение поворачивается.

Когда я нажимаю на него, он исчезает. (возможно переместить или повернуть куда-нибудь за пределы экрана)

Какие-либо предложения?

1 ответ

Решение

Хорошо, я мог бы сделать что-то вроде этого:

- (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);
        }
    }

}

Этот вариант должен решить проблему смещения при перетаскивании и тот факт, что при перетаскивании он все равно вращается.

Обратите внимание на статическую переменную в методе (перетаскивание), было бы лучше, если бы вы поместили ее как частную переменную в реализацию (я просто сэкономил время, сделав это таким образом;)).

Я не тестировал этот код, но идея должна быть ясной (я надеюсь).

С уважением

Другие вопросы по тегам