2017-04-22 1 views
0

에 :나는 <code>Quick</code>를 사용하여 다음과 같은 방법을 테스트 할 방법 CGAffineTransform (translationX)을 적용한 후 단위 테스트에 UIView의 프레임을

class ProtocolsSpec: QuickSpec {  
    override func spec() { 
     var view1: UIView! 
     var view2: UIView! 

     describe("Animator") { 
      beforeEach { 
       view1 = UIView(frame: CGRect(x: 50, y: 50, width: 50, height: 50)) 
       view2 = UIView(frame: CGRect(x: 80, y: 80, width: 50, height: 50)) 
      } 

      it("views origin should be (0, 20) at startup") { 
       initial(states: view1, view2) 

       expect(view1.frame.origin.x) == 0 
       expect(view1.frame.origin.y) == 20 
      } 
     } 
    } 
} 
: 이것은 테스트를 위해 사용하고있는 코드 (간체 버전)입니다

func initial(states: UIView...) { 
    for view in states { 
     view.transform = CGAffineTransform(translationX: 0, y: 20) 
    } 
} 

테스트가 작동하지 않으며 x와 y는 변경되지 않습니다.
제 질문은 변환을 적용한 후 정확한 (x, y) 좌표를 얻는 방법입니다.

답변

2

변형을 적용한 후에도 속성은 변경되지 않습니다. frame, centerbounds 변환 속성은 항등 변환되지 않은 경우,이 속성의 값이 정의되지 않은이므로 무시해야

: frame의 문서도한다고.

let resultingFrame = view1.frame.applying(view1.transform) 
expect(resultingFrame.origin.x) == 0 
expect(resultingFrame.origin.y) == 20 
:. 귀하의 경우에는 그와 같은 I의 의견이 CGRectapplying(_:) 방법을 사용하여 뷰 프레임 (에 변환을 적용하는 게 좋을 것 유효 프레임을 얻기 위하여

API Reference

보일 것이다

관련 문제