2017-02-09 4 views
1

화면의 맨 위에 사각형을 만들고, 아래에 도달 할 때까지 실행 한 다음 사라집니다. 이 작업은 ViewController의 뷰에 새 UIView를 추가 한 다음 애니메이션이 완료된 후 하위 뷰 배열에서이를 제거하여 수행됩니다. 이 모든 것에 약간의 아름다움을 더하기 위해 CGAffineTransform을 사용하여 랜덤 순환을 적용합니다.UIView 애니메이션에 이상한 효과

여기 호기심 많은 것은 움직일 때 무작위로 크기가 조정된다는 것입니다. 이것은 회전과 관련이 있어야한다는 것을 알고 있습니다. 적용하지 않으면 모든 정사각형이 크기 조정없이 완벽하게 움직이기 때문에 적용됩니다. 적용 할 때 발생합니다.

누군가 테스트 할 수 있기를 바랍니다. 그리고 무슨 일이 일어나는지 말해줘. 왜 사각형이 스케일링되는거야?

코드입니다 :

import UIKit 

class ViewController: UIViewController { 

    var timer: Timer! 

    override func viewDidLoad() { 
     timer = Timer.scheduledTimer(
      timeInterval: 1, 
      target: self, 
      selector: #selector(createView), 
      userInfo: nil, 
      repeats: true 
     ) 
    } 

    @objc private func createView() { 
     let v = UIView(frame: CGRect(
      x: self.view.bounds.width/2 - 50, 
      y: -100, 
      width: 100, 
      height: 100 
     )) 
     v.backgroundColor = UIColor.red 
     v.transform = CGAffineTransform(
      rotationAngle: CGFloat(Double(arc4random_uniform(360)) * M_PI/180) 
     ) 
     self.view.addSubview(v) 

     UIView.animate(withDuration: 5, delay: 0, options: [.curveLinear], animations: { 
      v.frame.origin.y = self.view.bounds.height 
     }, completion: { 
      _ in 
      v.removeFromSuperview() 
     }) 

     print(self.view.subviews.count) 
    } 

} 

답변

3

애니메이션 클럽의 첫 번째 규칙 당신이 그것을 변환있어 변경 한 경우 뷰의 프레임을 조작하지 않는 것입니다.

보기의 변환이 ID 변환이 아닌 경우 프레임이 정의되지 않으며 프레임을 변경하려고하면 정의되지 않은 동작이 발생합니다. 당신이 그 정의되지 않은 행동의 일부를 겪고있는 것 같습니다.

프레임이 아닌보기의 가운데 속성을 조작하거나 변형을 사용하여 오프셋을 적용하도록 코드를 리팩토링해야하지만 회전은 오프셋의 참조 프레임을 변경하기 때문에 까다로운 작업입니다.

보기의 가운데 속성을 조정하는 것이 좋습니다.

+0

완벽하게 작동했습니다. 정말 고맙습니다! –

+0

걱정할 필요가 없습니다. 보기의 프레임을 볼 때 이상한 결과가 나거나 프레임을 변경하면 이상한 결과가 발생하는 경우 비정상 변환이 있는지 확인하십시오. 나는이 규칙을 잊어 버렸고, 무엇이 잘못되었는지를 알아 내려고 시간을 낭비했다. –

관련 문제