使用变换旋转,然后更改帧原点,视图是否展开?

时间:2010-05-02 02:32:58

标签: iphone animation quartz-graphics

这完全是iPhone的庸俗。我正在开发一个库,但已将我的问题缩小到非常简单的代码。这段代码的作用是创建一个50x50的视图,应用几度的旋转变换,然后将帧向下移动几次。结果是50x50视图现在看起来要大得多。

以下是代码:

// a simple 50x50 view
UIView *redThing = [[UIView alloc] initWithFrame:CGRectMake(50, 50, 50, 50)];
redThing.backgroundColor = [UIColor redColor];

[self.view addSubview:redThing];

// rotate a small amount (as long as it's not 90 or 180, etc.)
redThing.transform = CGAffineTransformRotate(redThing.transform, 0.1234);

// move the view down 2 pixels
CGRect newFrame = CGRectMake(redThing.frame.origin.x, redThing.frame.origin.y + 2, redThing.frame.size.width, redThing.frame.size.height);
redThing.frame = newFrame;

// move the view down another 2 pixels
newFrame = CGRectMake(redThing.frame.origin.x, redThing.frame.origin.y + 2, redThing.frame.size.width, redThing.frame.size.height);
redThing.frame = newFrame;

// move the view down another 2 pixels
newFrame = CGRectMake(redThing.frame.origin.x, redThing.frame.origin.y + 2, redThing.frame.size.width, redThing.frame.size.height);
redThing.frame = newFrame;

// move the view down another 2 pixels
newFrame = CGRectMake(redThing.frame.origin.x, redThing.frame.origin.y + 2, redThing.frame.size.width, redThing.frame.size.height);
redThing.frame = newFrame;

那么,到底是怎么回事?现在,如果我通过应用平移变换来移动视图,它就可以正常工作。但这不是我想做的事情,应该无论如何都要工作。

有什么想法吗?

1 个答案:

答案 0 :(得分:15)

来自UIView文档:

  

如果还设置了transform属性,请改用bounds和center属性;否则,动画对帧属性的更改不会正确反映视图的实际位置。

     

警告:如果transform属性不是identity变换,则此属性的值是未定义的,因此应该被忽略。

换句话说,当设置frame时,我会对transform属性保持警惕。