2017-02-20 10 views
0

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

Кубик UIButton внутри UIView с 16 пикселями больше! Когда пользователь катит, я создаю анимацию для вращения и в одно и то же время изменяю значение представления X. Когда анимация закончена, я пытаюсь зафиксировать случайную позицию остановки.

Взгляните на мой код, чтобы лучше понять.

Это моя вращающаяся анимация:

CABasicAnimation* animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; 
animation.fromValue = [NSNumber numberWithFloat:0.0f]; 
animation.toValue = [NSNumber numberWithFloat: 2*M_PI]; 
animation.duration = 0.2; 
animation.repeatCount = 2; 
[dice.layer addAnimation:animation forKey:@"SpinAnimation"]; 

int min = -20; 
int maxim = 20; 
int rndValue = min + arc4random() % (maxim - min); 

// Here I change x value; 
CGRect rct = dice.superview.frame; 
rct.origin.x = n + rndValue; 
rct.size.width = dice.superview.bounds.size.width; 
rct.size.height = dice.superview.bounds.size.height; 
[UIView animateWithDuration:0.4 animations:^{ 
    dice.superview.frame = rct; 
}completion:^(BOOL finished){ 
    //Here, after the animation is done, i want to put a random rotation value. 
    float degrees = arc4random() % 30; 
    dice.superview.layer.anchorPoint = CGPointMake(0.5, 0.5); 
    dice.superview.transform = CGAffineTransformMakeRotation(degrees * M_PI/180); 
}]; 

Моя проблема, чем каждый раз (ожидается первый, когда я качусь) кубики (вид тоже) становится меньше, так как размер просмотра кадра меняется, и я могу «Не нашли проблему или какое-либо другое решение. PS: Если я использую только одно из них (вращающееся или изменяющееся значение оси X), кубики сохраняют одинаковый размер.

Я ищу уже много онлайн, но ничего полезного для меня. У кого-нибудь есть идея, пожалуйста? Большое спасибо!

ответ

0

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

Проблема становится от перемещения кости. Когда я перемещаю кости, я меняю его, это была моя ошибка. Проблема это решается, если вы измените центральную точку кости

Replace изменения анимации кадров с:

[UIView animateWithDuration:0.4 animations:^{ 
    dice.superview.center = CGPointMake((self.view.frame.size.width - CGRectGetMaxX(imageBack.frame))/2 + rndValue + CGRectGetMaxX(imageBack.frame), dice.superview.center.y); 
}completion:^(BOOL finished){ 

}]; 

Во всяком случае, есть мои ценности .. вы можете положить все, что вы хотите там!

Надеюсь, это поможет

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