Исправление ошибки при перемещении объекта и установке новых координат - PullRequest
0 голосов
/ 29 декабря 2011

У меня очень простая проблема, но я не могу найти причину этой ошибки.Любые идеи приветствуются.

Итак, у меня есть объект UIImageView, и я перемещаю его (перемещаю) из точки A (x1, y1) в точку B (x2, y2) в точку C (x2, y2) и т. Д.на ....

Когда я перемещаю его из A в B в C в D и так далее ... БЕЗ АНИМАЦИИ, это работает!

Когда я перемещаю его из A в B в C .... и так далее ... С АНИМАЦИЕЙ -> Есть ошибка! Только от A доB работает, B - C, ... и т. Д. Появляется в другом месте.

Я в основном реализую метод touchesBegan и touchesEnd и перемещаю объект в новое местоположение с помощью

//NO ANIMATION  ==> Works !

-(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    NSLog(@"End of touch");

    UITouch *touch = [[event touchesForView:self.view] anyObject];
    CGPoint location = [touch locationInView:touch.view];

    object.center = CGPointMake(location.x,  location.y); 

}

..

//ADDING ANIMATION ==> Bug ! 

-(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    NSLog(@"End of touch");

    UITouch *touch = [[event touchesForView:self.view] anyObject];
    CGPoint location = [touch locationInView:touch.view];

    [self spinLayer:object.layer duration:1 direction:SPIN_CLOCK_WISE newFrame:location];
    tempFrame = location;   // tempFrame is global. 
}

И в конце анимации я делаю

- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag {

object.center = tempFrame;

// I assign this because the object has to be updated to its new location to move it to points B, C, D and so forth...

// The object is actually at the desired point. But it appears on the SCREEN at a different location although it `NSLogs` at the right point.

}

Это ошибка:

Когда я назначаю object.center = tempFrame;, я ожидаю, что объект будет в (x2, y2).Технически это в (x2, y2) (когда я NSlog местоположение, я узнал), но это появляется в другом месте на экране.

Если я снова переместлю его в точку C, он использует (x2, y2) и правильно переместится в (x3, y3), но он снова появится где-то на экране!

Любые идеи??????

1 Ответ

1 голос
/ 29 декабря 2011

Вместо использования анимационных transform.translation.x и transform.translation.y ключевых путей я бы предложил использовать position.x и position.y ключевые пути.Итак, измените фрагмент

theAnimationX=[CABasicAnimation animationWithKeyPath:@"transform.translation.x"];
theAnimationX.toValue=[NSNumber numberWithFloat:(newFrame.x-object.center.x)];
theAnimationY=[CABasicAnimation animationWithKeyPath:@"transform.translation.y"];
theAnimationY.toValue=[NSNumber numberWithFloat:(newFrame.y-object.center.y)];

на

theAnimationX=[CABasicAnimation animationWithKeyPath:@"position.x"];
theAnimationX.toValue=[NSNumber numberWithFloat:newFrame.x)];
theAnimationY=[CABasicAnimation animationWithKeyPath:@"position.y"];
theAnimationY.toValue=[NSNumber numberWithFloat:(newFrame.y)];

В этом случае вы также можете использовать только position путь к ключу (и установить CGPoint как toValue)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...