2017-03-16 5 views
2

이 질문은 이전에 묻지 만 모든 대답은 목표 C에서 제공되었으며 신속한 해결책을 찾고 있습니다. 기존 스위프트 솔루션을 놓친 경우 알려 주시면이 질문을 마무리하겠습니다.번역 애니메이션 중에 UIView 위치를 추적하십시오

이것은 내가보기 애니메이션을 해요 방법은 다음과 같습니다

UIView.animate(withDuration: 10.0, animations: {() in 
    let translateTransform = CGAffineTransform.init(translationX: 0.0, y: Constants.screenHeight) 
    self.icon.transform = translateTransform 
}) 

는 내가 뭘하려는 애니메이션을 통해 현재의 프레임 위치를 추적 할 수 있습니다. 이를 달성하기 위해 다른 접근 방식을 취해야합니까?

답변

0

당신은 애니메이션 동안 뷰의 프레임을 얻기 위해이 시도 할 수 있습니다 : 당신이 애니메이션을 통해 프레임의 기록을 원한다면 코드가 너무 실행시 프레임을 얻을 것이다

let currentFrame = myView.layer.presentation()!.frame 
타이머 (이전에는 NSTimer)를 사용할 수 있습니다.

이 예제에서는 선택 사항이 풀려 있지 않으므로 nil인지 확실하지 않은 경우 if-let 문을 사용할 수 있습니다.

기타 도움이 필요하시면 알려주십시오.

0

UIView.frame을 관찰 할 수 있습니다. frame 키 패스에 대한 KVO를 사용해보십시오 :

view.addObserver(self, forKeyPath:"frame", options:.new, context:nil) 

override func observeValue(forKeyPath keyPath: String, ofObject object: Any, change: [String: id], context: UnsafeMutableRawPointer) { 
    print("value of \(keyPath) changed: \(change[NSKeyValueChangeNewKey])") 
} 

KVO가 NSObject의를 확장하지 않는 클래스 작동하지 않습니다.

Swift 클래스로 키 - 값 관측을 사용하려면 NSObject에서 상속해야합니다.

관찰자가 원하는 속성에 dynamic 수정자를 추가하십시오. 더 dynamic에 : KVO에 https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/InteractingWithObjective-CAPIs.html#//apple_ref/doc/uid/TP40014216-CH4-ID57

class YourClass: NSObject { 
    dynamic var view: UIView = ... 
} 

전체 기사 : https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/AdoptingCocoaDesignPatterns.html#//apple_ref/doc/uid/TP40014216-CH7-XID_8