Ios 在CGAffineTransformMakeRotation之后更改帧?

Ios 在CGAffineTransformMakeRotation之后更改帧?,ios,objective-c,Ios,Objective C,我从某个角度添加了UIView。现在在运行时,我想将该视图向上移动(比如说20px) 开始时 dragView = [[DragbleView alloc] initWithFrame:CGRectMake(10, 200, 200, 90)]; dragView.transform = CGAffineTransformMakeRotation (-0.663247); 在运行时 NSLog(@"Before : %@",NSStringFromCGRect(dragView.fram

我从某个角度添加了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像素以上

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

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

此外,如下文所述。iOS使用0,0作为左上角,因此要向上移动某些内容,需要从dragView.center.y中减去20。

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

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

此外,如下文所述。iOS使用0,0作为左上角,因此要“向上”移动某些内容,需要从dragView.center.y中减去20。

要向上移动,需要最小化y位置值,而您正在添加

试试这个:

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

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

试试这个:

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

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

如果transform属性不是标识转换,则 此属性未定义,因此应忽略

因此,一旦更改视图的变换,就无法更改帧。它不再工作了


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

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

如果transform属性不是标识转换,则 此属性未定义,因此应忽略

因此,一旦更改视图的变换,就无法更改帧。它不再工作了

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