swift - iOS两段式动画如何简洁实现?
大家讲道理
大家讲道理 2017-04-17 15:49:38
0
2
358

先贴一个我实现的效果。

有一个问题没解决,进入后右侧两个一闪而过,应该是viewDidLoad()中的transform的问题,如何避免这样的一闪而过?

还有一个问题是,我感觉动画的代码太low了,UIView.animateWithDuration()重复了三遍。。有没有更简洁的写法?

override func viewDidLoad() {
        // animation
        
        self.fbBtn.transform = CGAffineTransformMakeTranslation(0, 500)
        self.twBtn.transform = CGAffineTransformMakeTranslation(0, -500)
        
        self.msgBtn.transform = CGAffineTransformMakeTranslation(0, 500)
        self.emailBtn.transform = CGAffineTransformMakeTranslation(0, -500)
        
        // background image blurring effect
        let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.Dark)
        let blurEffectView = UIVisualEffectView(effect: blurEffect)
        blurEffectView.frame = self.view.bounds
        blurEffectView.autoresizingMask = [.FlexibleWidth, .FlexibleHeight]
        self.backImage.addSubview(blurEffectView)
        
        super.viewDidLoad()
        
        // Do any additional setup after loading the view.
        
    }

    
    override func viewDidAppear(animated: Bool) {
        let offset:CGFloat = 30
        // animation
        UIView.animateWithDuration(0.7, delay: 0.0, options: [], animations: {
                ()->Void in
                self.fbBtn.transform = CGAffineTransformMakeTranslation(0, offset)
                self.emailBtn.transform = CGAffineTransformMakeTranslation(0, -1*offset)
            }, completion: nil)
        
        UIView.animateWithDuration(0.7, delay: 0.3, options: [], animations: {
            ()->Void in
            self.msgBtn.transform = CGAffineTransformMakeTranslation(0, offset)
            self.twBtn.transform = CGAffineTransformMakeTranslation(0, -1*offset)
            }, completion: nil)
        
        UIView.animateWithDuration(0.3, delay: 1, options: [], animations: {
            ()->Void in
            self.msgBtn.transform = CGAffineTransformMakeTranslation(0, 0)
            self.twBtn.transform = CGAffineTransformMakeTranslation(0, 0)
            self.fbBtn.transform = CGAffineTransformMakeTranslation(0, 0)
            self.emailBtn.transform = CGAffineTransformMakeTranslation(0, 0)
            }, completion: nil)
        
    }
大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

모든 응답(2)
Ty80

사용해 보세요CAAnimationGroup 훨씬 더 우아해졌습니다.

阿神

아직 코드를 통한 인터페이스 레이아웃을 위해 프레임을 사용하고 있지만 인터페이스 레이아웃을 위해 AutoLayout을 사용하고 있지만 제약 조건을 제어하고 업데이트하기가 어렵고 제약 조건 코드가 급증하는 경우 코드의 양. IOS6 버전의 애플리케이션에 sizeClass 기능도 포함하려면 다음 레이아웃 라이브러리 세트를 사용하세요.

으아아아

이 레이아웃 라이브러리는 Android의 선형 레이아웃, 상대 레이아웃, 프레임 레이아웃, 테이블 레이아웃을 기반으로 합니다. 동시에 IOS의 AutoLayout 기능, 일부 SIZECLASS 기능 및 IOS9의 UIStackView 기능이 있습니다. 이는 석조의 일부 구문 메커니즘을 참조하지만 IOS5 버전의 애플리케이션에서 실행될 수 있습니다. 사용이 간단하고 편리하며 코드가 명확하고 적습니다. 4개의 튜토리얼 문서도 함께 제공됩니다:

으아아아

http://blog.csdn.net/yangtiang/article/details/48011431 테이블 레이아웃

으아아아
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿