gpt4 book ai didi

iphone - 我应该如何与 UIView 的几何图形交互,而不考虑应用的任何变换?

转载 作者:行者123 更新时间:2023-12-03 20:03:03 26 4
gpt4 key购买 nike

我有一个观点,我希望用户通过点击并按住某处并不断移动手指来绕其中心旋转。

我已经计算出了所有的几何图形;我所做的是将相对于中心的初始触摸角度存储为 offsetAngle,然后我的 TouchMoved 方法如下所示:

- (void) touchesMoved: (NSSet *)touches withEvent:(UIEvent *)event {
self.transform = CGAffineTransformMakeRotation(0);
CGPoint location = [[touches anyObject] locationInView: self];
CGPoint actualCenter = [self convertPoint: self.center fromView: self.superview];
CGPoint relativeTouch = [MathHelper translatePoint:location relativeTo: actualCenter];
CGPoint zero = CGPointMake(0, 0);
float angle = [MathHelper getAngleForPoint:zero andPoint:relativeTouch];
self.transform = CGAffineTransformMakeRotation(offsetAngle-angle);
}

难看的地方是第一行,我必须恢复旋转才能在 View 中获得正确的事件位置。如果我不这样做,那么位置就会到处乱跳,因为 View 正在旋转,因此没有连续性......

另一个问题是当您想要操作 View 的框架(例如向下移动它)时,当 View 应用了变换时:

- (IBAction)toggleSettingsView {
BOOL state = [settingsSwitch isOn];
float height = optionsView.bounds.size.height;
CGRect polygonFrame = polygonView.frame;

[UIView beginAnimations:@"advancedAnimations" context:nil];
[UIView setAnimationDuration:0.3];
if (state) {
optionsView.alpha = 1.0;
polygonFrame.origin.y += height;
} else {
optionsView.alpha = 0.0;
polygonFrame.origin.y -= height;
}
polygonView.frame = polygonFrame;
[UIView commitAnimations];

}

这严重扭曲了 View 。

我必须提到,CGTransform 和 CALayer 变换具有相同的效果。

这听起来像是我做错了什么,但我不知道我应该做什么。

最佳答案

我会使用 super View 的坐标系,因为它不受旋转的影响:

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
CGPoint location = [[touches anyObject] locationInView:self.superview];
CGPoint relativeTouch = [MathHelper translatePoint:location relativeTo:self.center];
CGPoint zero = CGPointMake(0, 0);
float angle = [MathHelper getAngleForPoint:zero andPoint:relativeTouch];
self.transform = CGAffineTransformMakeRotation(offsetAngle-angle);
}

关于iphone - 我应该如何与 UIView 的几何图形交互,而不考虑应用的任何变换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/297530/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com