Воробей: Как иметь разные события для прикосновения и перетаскивания
В основном я хочу коснуться изображения, чтобы повернуть его вокруг центра на 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);
}
}
}
Этот вариант должен решить проблему смещения при перетаскивании и тот факт, что при перетаскивании он все равно вращается.
Обратите внимание на статическую переменную в методе (перетаскивание), было бы лучше, если бы вы поместили ее как частную переменную в реализацию (я просто сэкономил время, сделав это таким образом;)).
Я не тестировал этот код, но идея должна быть ясной (я надеюсь).
С уважением