在没有框架改变的情况下旋转UIView

时间:2013-05-27 12:04:24

标签: ios objective-c ipad

我有一个UIView,它的高度和宽度在旋转到90度时互换。现在,当我尝试增加高度或宽度时,我看起来异常。如何更改旋转的UIView的高度?

2 个答案:

答案 0 :(得分:9)

Apple的文档声明,当视图的frame不是标识转换时,视图的transform属性将变为未定义。

旋转视图会改变视图的转换。

现在,为什么这会使框架无效? Apple的文档实际上有点不精确:框架属性对于转换后的视图并不是完全没有意义的。相反,它现在将反映视图的边界矩形,即变换后的视图可以容纳的最小直立矩形。

这是因为frame实际上是派生属性。如果要更改变换视图的“实际高度”,即其自身坐标系中的高度(在应用变换之前),则有一个属性:bounds

所以,简而言之:

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

答案 1 :(得分: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"];
}