UIImageview не появляется в позиции, указанной с помощью UIImageview.center - PullRequest
0 голосов
/ 04 апреля 2020

Gif of the functionality which also shows the problem

Я сделал простое приложение с быстрым движением Xcode, в котором круговой просмотр изображений в середине экрана можно перемещать жестом-пальцем и менять цвет при касании внешняя сторона большого кольца (изображение для справки) и в то же время меняет положение на середину экрана. Изменение цвета и респауна достигается оператором if, который изменяет файл изображения, когда евклидово расстояние между средними точками меньшего Imageview и средними координатами экрана превышает определенную длину. Тем не менее, когда ImageView появляется в том, что мне кажется фиксированными средними координатами, позиция появления незначительно перемещается в направлении пролистывания. И тем более, если жест смахивания быстрее. Спасибо за любые подсказки.


Редактировать: я удалил каждую часть, которая мешает этому быть минимальным примером для моей проблемы, а также загрузил файлы I для цветных шаров. Может кто-нибудь сказать мне, как еще я мог бы улучшить свой вопрос, чтобы получить ответ?


Редактировать: Теперь я добавил анимированный GIF, который сначала показывает функциональность, а затем, когда я увеличиваю скорость перетаскивания, также показывает проблема, с которой я сталкиваюсь.

File for colored ball. (1.png)File for colored ball. (2.png)File for colored ball. (3.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)
        }
    }
}
...