2013-05-27 2 views
5

저는 90도 회전시 높이와 너비가 바뀌는 UIView를 사용합니다. 이제 높이 또는 너비를 늘리려고하면 비정상적인 모양이 나타납니다. 회전 된 UIView의 높이를 변경하려면 어떻게해야합니까?프레임을 변경하지 않고 UIView를 회전하십시오.

+0

난 그냥 방법은 화면에 나타나는 방식의 각도를 변경해야합니다. –

+5

'view.transform = CGAffineTransformMakeRotation (M_PI/2); ' –

+1

90 도가 그 예입니다. 나는 수동으로보기를 회전시키고있다. 높이와 너비가 바뀌고 있습니다. 화면에서보기 각도를 변경해야합니다. –

답변

8

Apple 설명서에는보기의 transform이 ID 변환이 아닐 때 frame보기 속성이 정의되지 않는다고 나와 있습니다.

보기를 회전하면보기의 변형이 변경됩니다.

이제 프레임이 무효화되는 이유는 무엇입니까? Apple의 설명서는 사실 약간 부정확합니다. 변형 된보기에서는 frame 속성이 완전히 의미가 없습니다. 대신 뷰의 경계 사각형, 즉 변환 된 뷰가 들어갈 수있는 가장 작은 직립 사각형을 반영합니다.

frame은 실제로 파생 된 속성이기 때문입니다. 변환 된 뷰의 "실제 높이", 즉 변환이 적용되기 전의 자체 좌표계의 높이를 변경하려면 해당 속성이 bounds입니다.

그래서, 간단히 말해서 :

CGRect bounds = myView.bounds; 
bounds.size.height = newHeight; 
myView.bounds = bounds; 
+0

코드에이 줄을 입력하면 CGAffineTransformMakeRotation을 어디에 추가해야합니까? 부품? 그 전후에? –

+0

야, 너는 내 하루를 보냈다. 감사합니다. 친구. –

+0

고맙습니다. 다행스럽게 도울 수있어! 기록을 위해 (나는 지금 당장 자신을 알아 냈을 것입니다) : 경계를 바꾸고 있다면, 당신이 전후로 변환을 변경하고 있는지 여부는 중요하지 않습니다. 프레임을 변경하려면'CGAffineTransformIsIdentity (myView.transform)'이 YES (즉, 변환을 변경하기 전) 인 동안에 만 이것을 수행해야합니다. 프레임 대 경계에 대한 자세한 정보는이 블로그 게시물 (나이 아닌)을 확인하십시오. http://ashfurrow.com/blog/you-probably-dont-understand-frames-and-bounds – fzwo

1

를 사용하여 다음과 같은 방법을 ...

- (void) runSpinAnimationOnView:(UIView*)view duration:(CGFloat)duration rotations:(CGFloat)rotations repeat:(float)repeat; 
{ 
    CABasicAnimation* rotationAnimation; 
    rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; 
    rotationAnimation.toValue = [NSNumber numberWithFloat: M_PI * 2.0 /* full rotation*/ * rotations * duration ]; 
    rotationAnimation.duration = duration; 
    rotationAnimation.cumulative = YES; 
    rotationAnimation.repeatCount = repeat; 

    [view.layer addAnimation:rotationAnimation forKey:@"rotationAnimation"]; 
} 
관련 문제