![Gif of the functionality which also shows the problem](https://i.stack.imgur.com/2VIJt.gif)
Я сделал простое приложение с быстрым движением Xcode, в котором круговой просмотр изображений в середине экрана можно перемещать жестом-пальцем и менять цвет при касании внешняя сторона большого кольца (изображение для справки) и в то же время меняет положение на середину экрана. Изменение цвета и респауна достигается оператором if, который изменяет файл изображения, когда евклидово расстояние между средними точками меньшего Imageview и средними координатами экрана превышает определенную длину. Тем не менее, когда ImageView появляется в том, что мне кажется фиксированными средними координатами, позиция появления незначительно перемещается в направлении пролистывания. И тем более, если жест смахивания быстрее. Спасибо за любые подсказки.
Редактировать: я удалил каждую часть, которая мешает этому быть минимальным примером для моей проблемы, а также загрузил файлы I для цветных шаров. Может кто-нибудь сказать мне, как еще я мог бы улучшить свой вопрос, чтобы получить ответ?
Редактировать: Теперь я добавил анимированный GIF, который сначала показывает функциональность, а затем, когда я увеличиваю скорость перетаскивания, также показывает проблема, с которой я сталкиваюсь.
![File for colored ball. (1.png)](https://i.stack.imgur.com/Vix4F.png)
![File for colored ball. (2.png)](https://i.stack.imgur.com/wsz3V.png)
![File for colored ball. (3.png)](https://i.stack.imgur.com/HnrAP.png)
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
@IBOutlet weak var colorImg: UIImageView!
@IBAction func panMade(_ sender: UIPanGestureRecognizer) {
if sender.state == .began || sender.state == .changed {
let translation = sender.translation(in: sender.view)
let changeX = (sender.view?.center.x)! + translation.x
let changeY = (sender.view?.center.y)! + translation.y
sender.view?.center = CGPoint(x: changeX, y: changeY)
sender.setTranslation(CGPoint.zero, in: sender.view)
}
let coordX = colorImg.frame.origin.x+60
let coordY = colorImg.frame.origin.y+60
let centerX = UIScreen.main.bounds.size.width*0.5
let centerY = UIScreen.main.bounds.size.height*0.5
let a = (coordX-centerX) ; let b = (coordY-centerY) ; let c = (a*a) ; let d = (b*b) ; let j = Double(c+d)
if (j.squareRoot() > 112) {
let n = Int.random(in: 1..<4)
colorImg.image = UIImage(named: String(n) + ".png")
sleep(1)
colorImg.center = CGPoint(x: centerX, y: centerY)
}
}
}