在CGAffineTransformMakeRotation之后更改框架?

时间:2014-12-17 16:31:39

标签: ios objective-c

我已经从某个角度添加了UIView。现在在运行时我想将该视图移动到(例如20px)。

开始时

 dragView = [[DragbleView alloc] initWithFrame:CGRectMake(10, 200, 200, 90)];
dragView.transform = CGAffineTransformMakeRotation (-0.663247);

在运行时

  NSLog(@"Before : %@",NSStringFromCGRect(dragView.frame));
[dragView setCenter:CGPointMake(dragView.frame.origin.x, dragView.center.y+20)];
NSLog(@"After : %@",NSStringFromCGRect(dragView.frame));

控制台O / p

Before : {{3.4947295778412979, 147.97225037436704}, {213.0105408443174, 194.05549925126593}}
After : {{-103.0105408443174, 167.97225037436704}, {213.0105408443174, 194.05549925126593}}

你可以看到它走错了地方。如何放置20 px以上

3 个答案:

答案 0 :(得分:3)

如果您阅读UIView框架属性上的文档,他们会说:

  

如果transform属性不是identity变换,则值为   此属性未定义,因此应忽略。

因此,一旦您更改了视图的转换,就无法更改框架。它不再起作用了。

相反,你应该使用视图的中心属性,正如@GaryRiches在他的回答中建议的那样。

答案 1 :(得分:1)

按照您的指定进行操作。使用X和Y的中心点可以获得更好的结果:

[dragView setCenter:CGPointMake(dragView.center.x, dragView.center.y + 20)];

另外,如下所述。 iOS使用0,0作为左上角,所以要移动一些东西" up"需要从dragView.center.y中减去20。

答案 2 :(得分:0)

要向上移动,它需要最小化Y位置值,而您要添加。

试试这个:

[dragView setCenter:CGPointMake(dragView.frame.origin.x, dragView.center.y - 20)];