Swift 사용 시 iOS 7과 iOS 8의 UIView 애니메이션 동작이 다름

9432 단어 SwiftiOS8ios7iOS

개시하다


Objective-C에서view의 width를 바꾸고 싶을 때self.view.frame = CGRectMake(0, 0, 100, 100);처럼 프레임을 같이 썼지만 Swift를 사용한 후view.frame.size.width = 100를 쓰는 경우가 많아졌다.
하지만 그 기술법을 사용할 때 잘 어울리는 부분이 있어서 쓰려고 했어요.

iOS 7과 iOS 8의 차이점


아래 코드는 화면 중앙의 100×100 크기의 빨간색 UIView에서 버튼을 눌러 화면 너비의 정사각형으로 확대한 후 원래 크기의 애니메이션을 복원한다.
class ViewController: UIViewController {

    let sampleView = UIView()
    var defaultFrame = CGRectZero

    override func viewDidLoad() {
        super.viewDidLoad()
        sampleView.backgroundColor = .redColor()
        sampleView.frame.size = CGSize(width: 100, height: 100)
    }

    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)
        sampleView.center = view.center
        defaultFrame = sampleView.frame
        view.addSubview(sampleView)
    }

    @IBAction func insertFrameButton(sender: AnyObject) {
        let width = UIScreen.mainScreen().bounds.size.width
        var newFrame = CGRect(x: 0, y: 0, width: width, height: width)
        newFrame.origin.y = view.center.y - width / 2
        UIView.animateWithDuration(0.5, animations: {
            self.sampleView.frame = newFrame
        }) { finished in
            UIView.animateWithDuration(0.5, animations: {
                self.sampleView.frame = self.defaultFrame
            }, completion: nil)
        }
    }

    @IBAction func insertEachButton(sender: AnyObject) {
        let width = UIScreen.mainScreen().bounds.size.width
        UIView.animateWithDuration(0.5, animations: {
            self.sampleView.frame.size.width = width
            self.sampleView.frame.size.height = width
            self.sampleView.center = self.view.center
        }) { finished in
            UIView.animateWithDuration(0.5, animations: {
                self.sampleView.frame = self.defaultFrame
            }, completion: nil)
        }
    }
}
@IBAction func insertFrameButton(sender: AnyObject) 사용자는 기존의 방식에 따라 CGRRect를 프레임에 대입하여 UIView 애니메이션을 만들었다.@IBAction func insertEachButton(sender: AnyObject)에서 width,height,center는 각각 목적치를 대입하여 UIView를 애니메이션화했다.
그럼 각자의 행동이 다른지 살펴봅시다.

iOS 8의 동작


※ 아래 그림은 유튜브에 연결됩니다.

어떤 방법을 써도 똑같은 애니메이션을 한다.
근데 iOS 7은 어때요?

iOS 7에서의 동작


※ 아래 그림은 유튜브에 연결됩니다.
@IBAction func insertEachButton(sender: AnyObject)의 상황에서 상상한 애니메이션과 다른 동작을 했다.

최후


UIView의 animation의 파행기 안에서는 CGRRect를 프레임에 대입하는 운영체제 간 동작이 다르지 않기 때문에 그것을 사용하는 것이 좋다.

좋은 웹페이지 즐겨찾기