Я сделал синий шар, который можно таскать по пользователя только на красный круг путь: Вычислить, сколько кругов пользователь сделал в круге Путь
Я хочу, чтобы проверить, сколько раз пользователь делает передний или задний круг (начало & конец находится в верхней части кругового пути), например - если он перетаскивает мяч по часовой стрелке, так что кружки равны +1, и если он перетащит его другим способом, кругов -1.
Я пытался сделать это (Это inculdes перетаскивания мяча и моя попытке сосчитать круги):
@IBAction func dragBall(recognizer: UIPanGestureRecognizer) {
let point = recognizer.locationInView(self.view);
let earthX = Double(point.x)
let earthY = Double(point.y)
let midViewXDouble = Double(midViewX)
let midViewYDouble = Double(midViewY)
let angleX = (earthX - midViewXDouble)
let angleY = (earthY - midViewYDouble)
let angle = atan2(angleY, angleX)
let earthX2 = midViewXDouble + cos(angle)*100
let earthY2 = midViewYDouble + sin(angle)*100
circlePath2 = UIBezierPath(arcCenter: CGPoint(x: earthX2,y: earthY2), radius: CGFloat(10), startAngle: CGFloat(0), endAngle:CGFloat(M_PI * 2), clockwise: true)
shapeLayer2.path = circlePath2.CGPath
if degrees == 0 {
laps += 1
print(laps)
}
}
И это сработало! но когда пользователь перетаскивает мяч очень быстро, он не вычисляет, и он не вычисляет назад.
Вместо проверки на 0, вы можете сделать угол суммирование, а затем разделить его на 360, чтобы получить число спинов. В принципе, не переустанавливайте угол, а просто накапливайте угол в переменной. –
@EugeneZhenyaGordin Можете ли вы привести мне пример? – Eliko
ok ... так что скажите, что вы начинаете с 0 по часовой стрелке, когда вы снова попадаете в ту же точку, а не заново, просто продолжайте добавлять градусы, 385 ... 450 и т. Д., Если вы идите против часовой стрелки, вычтите. когда касания закончатся, устройство на 360, и вы получите количество спинов, если это значение отрицательно, значит, вы шли против часовой стрелки. –