Как получить случайные координаты внутри быстрого UIView? - PullRequest
0 голосов
/ 12 февраля 2020

Я создаю функцию анимации для случайного генерирования изображений в uiView. Тем не менее, он всегда возвращает 0,0 Пожалуйста, помогите!

private func coinAnimation(image: UIImage) {
    let imageView = UIImageView(image: image)
    imageView.frame = self.view.convert(self.coinsView.frame, from: self.coinsView.superview!)
    imageView.contentMode = UIView.ContentMode.scaleAspectFit
    imageView.backgroundColor = .red

    let frame = coinsView.frame

    let x = randomInRange(lo: 0, hi: Int(frame.size.width - imageView.bounds.size.width))
    let y = randomInRange(lo: 0, hi: Int(frame.size.height - imageView.bounds.size.height))

    let position = CGPoint(x: x, y: y)

    UIView.animate(withDuration: 1.0, delay: 0.0, options: .curveEaseInOut, animations: {
        imageView.center = position
        self.coinsView.addSubview(imageView)
    }, completion: nil)
}

private func randomInRange(lo: Int, hi : Int) -> Int {
    return lo + Int(arc4random_uniform(UInt32(hi - lo + 1)))
}

1 Ответ

2 голосов
/ 12 февраля 2020

Ваша проблема со строкой ниже

imageView.frame = self.view.convert(self.coinsView.frame, from: self.coinsView.superview!)

Эта строка устанавливает тот же кадр от coinsView до imageView. И когда вы пытаетесь получить случайные точки x и y в приведенном ниже коде, он всегда возвращает 0. Потому что frame.size.width и imageView.bounds.size.width одинаковы и одинаковы для высоты.

let x = randomInRange(lo: 0, hi: Int(frame.size.width - imageView.bounds.size.width))
    let y = randomInRange(lo: 0, hi: Int(frame.size.height - imageView.bounds.size.height))

Для лучшего понимания добавьте строку ниже к своему коду, чтобы установить imageView Frame, вам нужно изначально установить stati c frame для вашего изображения.

imageView.frame = CGRect(x: 0, y: 0, width: 30, height: 30)

Убедитесь, что ширина и высота должны быть меньше ширины и высоты МонетыПосмотреть ширину и высоту

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...