Ios 画一条类似刻度盘的线,指向用户';s接触点
假设我想画一条类似于时钟刻度盘(蓝线)的线,从屏幕中心(中心)开始,到用户触摸位置(a、B或C)结束 不管手指有多远,表盘的长度和大小都是一样的Ios 画一条类似刻度盘的线,指向用户';s接触点,ios,objective-c,math,geometry,Ios,Objective C,Math,Geometry,假设我想画一条类似于时钟刻度盘(蓝线)的线,从屏幕中心(中心)开始,到用户触摸位置(a、B或C)结束 不管手指有多远,表盘的长度和大小都是一样的 - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *touch = [[event allTouches] anyObject]; CGPoint touchLocation = [touc
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [[event allTouches] anyObject];
CGPoint touchLocation = [touch locationInView:touch.view];
NSLog(@"Center point = %f %f",self.view.center.x,self.view.center.y);
NSLog(@"finter at point = %f %f",touchLocation.x,touchLocation.y);
// line re drawing itself ...
NSLog(@"end point = %f %f",?,?);
}
你需要知道你的队伍的长度。它与接触点无关,对吗 首先找到触摸相对于中心点的坐标
x = Touch.x - center.x
y = Touch.y - center.y
现在我们需要得到角度
angle = arctan(y / x)
如果x为负数,调整180度(pi)-这将恢复分割中丢失的部分
现在将sin(角度)和cos(角度)乘以所需的长度,得到新的点
newX = cos(angle) * length
newY = sin(angle) * length
这里有一些Swift代码,可以让你大致达到目的。在操场上试着验证不同的触摸值和长度
let lineLength = 13.0
// Touch points
let x = -5.0
let y = -5.0
// Calculate angle
var angle = atan(y / x)
if x < 0 {
angle += 3.14159;
}
// Get new X and Y
var newX = cos(angle) * lineLength
var newY = sin(angle) * lineLength
让lineLength=13.0
//接触点
设x=-5.0
设y=-5.0
//计算角度
变量角度=atan(y/x)
如果x<0{
角度+=3.14159;
}
//得到新的X和Y
var newX=cos(角度)*线宽
var newY=sin(角度)*线宽
谢谢,但是应该从中心点减去newX和newY,不是吗?是的-我显示的swift代码假设您已经将中心转换为(0,0),所以您应该将center.x添加到newX,将center.Y添加到newY。这应该是你的最终终点。