2012-08-23 1 views
0

매우 이상한 문제가 있습니다. 나는 회전과 같이 viewDidAppear에 수동으로 UIView의 수퍼 이동하려고 : 어떤 이유센터 속성을 설정하여 UIView의 수퍼 뷰 이동

- (void)viewWillAppear:(BOOL)animated 
{ 
    // ... 

    [self.view.superview setTransform:CGAffineTransformMakeRotation(M_PI/2)]; 
    [self.view.superview setCenter:CGPointMake(100, 200)]; // (100, 200) is toy value 

    // ... 
} 

는, 회전이 올바르게 적용되지만 슈퍼 뷰의 중심 (즉, 위치)이 전혀 이동되지 않습니다. 나는 또한 회전 + 번역 (또는 단지 번역만으로)의 조합 인 변형을 CGAffineTransform으로 설정하려고 시도했으며, 이는 superview도 움직이지 않을 것이다.

차이가 있다면 self.view.superview이 가장 위에 있습니다 (즉, self.view.superview.superviewnil).

나는 여기 아주 간단한 것을 놓치고 있습니까?

편집 : nielsbot의 의견은 viewDidLoad에 넣는 것이 정확했지만 그때까지보기가 이미 나타나서 새 위치로 스냅하는 깜박임이 있습니다. 이 문제를 해결할 방법이 있습니까?

+1

'viewDidAppear'에서 시도하십시오 - 코드는'viewWillAppear'라고 말합니다. *가 * 나타나고 변경 사항을 취소 한 후 일부 레이아웃 코드가 실행될 수 있습니다. – nielsbot

+0

먼저 "회전이 제대로 적용되었지만 수퍼 뷰가 전혀 움직이지 않았습니다"라고 말하고 싶다고 분명히 말하십시오. – Nayan

+0

@nielsbot 그 것이 효과가 있었지만 처음에는보기를 보여주기 때문에 깜박임이 있습니다. 나중에보기가 움직이기 때문에 깜박 거립니다. 그걸 피할 ​​수있는 방법이 있습니까? – kevlar

답변

0

때문에 뷰의 경계를 설정하십시오 :

[self.view.superview setBounds:CGRectMake(x,y,self.view.superview.width,self.view.superview.height)]; 

이것은 X에보기를 이동해야는, y 위치는 그에게 을 제공하지만 물론이 중심

중앙하지 않습니다 단지 예를 들어 회전에 사용되는 특별한 점을 나타냅니다.

+0

뷰에 변형을 설정하면 프레임이 더 이상 유효하지 않습니다. http://developer.apple.com/library/ios/#documentation/uikit/reference/uiview_class/UIView/UIView.html#//apple_ref/doc/uid/TP40006816-CH3-SW3 – kevlar

+0

그게 전부 프레임의 새로운 지점을 계산하고 싶지 않다면 transform으로 프레임의 왼쪽 위 모서리 (원점)를 정정한다. 경계 원점을 사용한다. – lukaswelte