移动到转换的视图时保持原始的视图方向
在图1中,我有一个名为parentView1的UIView(这是灰色的颜色视图)。 它有子视图(图片中的4)。
在将CGAffineTransformRotate应用到parentView1之前,我可以拖动一个视图(红色垂直)并放入parentView1,结果如图2所示。
但是,如果我首先在parentView1上执行CGAffineTransformRotate(请参阅代码),然后通过拖放将红色垂直视图添加到parentView1中,红色垂直视图也会立即旋转到与parentView1(图3)相同的状态垂直的看法。 我不希望它发生。 我需要将红色的垂直视图放置在原来的方向上,然后才能被拖走。
反过来也会发生同样的效果:如果parentView1已被旋转,则将子视图从parentView1移动到边界之外。
任何build议?
代码旋转parentView1:
self.parentView1.transform = CGAffineTransformRotate(self.parentView1.transform, degreesToRadians(45));
将代码从父级移到另一级:
-(void)getNewPosition2:(UIView *)viewToConvert parentView:(UIView *)parentViewx superParentView:(UIView *)superParentView { CGPoint newPoint = [superParentView convertPoint:viewToConvert.center fromView:parentViewx]; // viewToConvert.layer.position = newPoint; viewToConvert.center = newPoint; [viewToConvert removeFromSuperview]; [superParentView addSubview:viewToConvert]; }
调用上面的getNewPostition2方法:
[self getNewPosition2:recognizer.view parentView:self.view superParentView:self.parentView1];
我想出了一个解决scheme,通过使用parentView1的变换matrix来计算两种情况下的angular度:将对象移入和移出parentView1。
将对象移动到parentView1中:
float angle = (2 * M_PI) - atanf(self.parentView1.transform.b / self.parentView1.transform.a ); viewToConvert.transform = CGAffineTransformRotate(viewToConvert.transform, angle);
将对象移出parentView1:
float angle = atanf(self.parentView1.transform.b / self.parentView1.transform.a); viewToConvert.transform = CGAffineTransformRotate(viewToConvert.transform, angle);