2013-09-04 1 views
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); 
    } 

} 

Выше мой код.

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

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

Любые предложения?

+0

В зависимости от того, как вы положите его на дисплей список locationInSpace должен быть родителем или даже parent.parent (должно быть общим предком для этого элемента и родительским образом. –

ответ

0

Ok я woould сделать что-то вроде этого:

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

} 

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

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

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

С уважением

+0

Хорошо, что это работает для вас. Не забудьте проголосовать, поблагодарить и сохранить кодировку! – luiso1979

 Смежные вопросы

  • Нет связанных вопросов^_^