2016-07-17 3 views
0

Я положил UIView в центр экрана с помощью Autolayout. Этот UIView представляет собой квадрат размером 15% ширины экрана. Тогда на мой контроллер я добавляю cornerRadius:Циркулярная анимация масштаба UIView восходит к квадрату иногда

override func viewDidLayoutSubviews() { 
    circle.layer.cornerRadius = circle.frame.size.width/2.0 
} 

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

UIView.animateWithDuration(0.4, delay: 0.1, options: .CurveEaseIn, animations: {() -> Void in 
    self.circle.alpha = 0.0 
    self.circle.transform = CGAffineTransformMakeScale(0.01, 0.01) 
}) { (finished) -> Void in 
    scaleUp() 
} 

private func scaleUp() { 
    UIView.animateWithDuration(0.5, delay: 0.0, options: .CurveEaseInOut, animations: {() -> Void in 
     self.circle.alpha = 1.0 
     self.circle.transform = CGAffineTransformIdentity 
    }) { (finished) -> Void in 

    } 
} 

Иногда анимация уменьшения масштаба не работает должным образом. Перед запуском cornerRadius удаляется, и мой UIView становится квадратом. Но иногда моя анимация работает хорошо, а анимация круговой шкалы в порядке.

Кроме того, масштабирование вверх анимации, кажется, работает хорошо все время.

Я не понимаю, почему анимация масштаба вниз не работает все время.

Любая идея?

Благодаря

ответ

0

При анимации с Auto Layout включена, то, как правило, хорошая идея, чтобы позвонить layoutIfNeeded на ваш взгляд, прежде чем начать анимацию и снова в цикле.

override func viewDidLayoutSubviews() { 
    circle.layer.cornerRadius = circle.frame.size.width/2.0 
} 

@IBAction func scaleDownUp(sender: AnyObject) { 
    self.circle.layoutIfNeeded() 
    UIView.animateWithDuration(0.4, delay: 0.1, options: .CurveEaseIn, animations: {() -> Void in 
     self.circle.alpha = 0.0 
     self.circle.transform = CGAffineTransformMakeScale(0.01, 0.01) 
     self.circle.layoutIfNeeded() 
    }) { (finished) -> Void in 
     self.scaleUp() 
    } 
} 

private func scaleUp() { 
    self.circle.layoutIfNeeded() 
    UIView.animateWithDuration(0.5, delay: 0.0, options: .CurveEaseInOut, animations: { 
     self.circle.alpha = 1.0 
     self.circle.transform = CGAffineTransformIdentity 
     self.circle.layoutIfNeeded() 
    }) { (finished) -> Void in 

    } 
} 
+0

У меня все еще такое же поведение с вызовом layoutIfNeeded() – guillaume

+0

Хммм. Что делать, если вместо этого вы вызываете 'self.view.layoutIfNeeded()'? Я не могу воспроизвести вашу проблему. У меня есть центрированное представление, которое составляет 15% от ширины экрана. Высота равна ширине. Есть ли что-нибудь еще, что я могу сделать, чтобы это увидеть? – vacawama

+0

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