Край остаточного изображения симулятора iOS остался на экране после анимации - PullRequest
0 голосов
/ 16 сентября 2018

Я добавил опцию весны в UIImage. Он отлично работал на моем телефоне, очень приятно. Бодрый и гладкий. Но когда я запускаю его на симуляторах iOS, он всегда оставляет некоторые края на экране. Это становится проблемой, когда мне нужно загрузить скриншоты в App Store.

enter image description here

Это мой код:

let theTile = numberTile
let bounds = theTile.bounds

UIView.animate(withDuration: 1, delay: 0, usingSpringWithDamping: 0.2, initialSpringVelocity: 10, options: [.curveEaseInOut, .allowUserInteraction], animations: {
theTile.bounds = CGRect(x: bounds.origin.x, y: bounds.origin.y, width: bounds.size.width * 1.2, height: bounds.size.height * 1.2)
}, completion: nil)

Это сокращенный код

let theTile = numberTile
let bounds = theTile.bounds

UIView.animate(withDuration: 0.3, delay: 0, options: .allowUserInteraction, animations: {
theTile.bounds = CGRect(origin: bounds.origin, size: self.size)
}, completion: nil)

1 Ответ

0 голосов
/ 17 сентября 2018

Попробуйте, хотя это может быть не единственной проблемой.Если это представление коллекции, мне нужно было бы увидеть вашу ячейку для функции строки, так как вы можете загружать ячейку с перепутанными границами для начала.Вот предложение, хотя.Вместо этого анимируйте преобразование.

//to animate larger
UIView.animate(withDuration: 1, delay: 0, usingSpringWithDamping: 0.2,initialSpringVelocity: 10, options: [.curveEaseInOut, .allowUserInteraction], animations: {
        theTile.transform = CGAffineTransform(scaleX: 1.2, y: 1.2)
    }, completion: nil)

//animate smaller
UIView.animate(withDuration: 1, delay: 0, usingSpringWithDamping: 0.2, initialSpringVelocity: 10, options: [.curveEaseInOut, .allowUserInteraction], animations: {
        theTile.transform = .identity
    }, completion: nil)

Если это представление коллекции в ячейке для строки, вам может потребоваться проверить выбранный индекс, но если не выбрано def, вам нужно установить преобразование на идентичность.

РЕДАКТИРОВАТЬ: Вы говорите, что это не решает проблему.В какой среде вы работаете?Тип Mac.Я лично считаю, что это проблема кода где-то еще, так как я написал тонны анимационного кода и никогда не видел эту ошибку.Вот минимальный пример, который не создает «призрачные слои» на моем устройстве или симуляторе.Если бы вы могли сделать минимальный пример, который бы это сделал, это очень помогло бы ... До тех пор я думаю, что это что-то в вашем коде, возможно, представление вашей коллекции.

import UIKit

class ViewController: UIViewController {

    lazy var box : UIView = {
        let v = UIView(frame: CGRect(x: 0, y: 0, width: 80, height: 80))
        v.backgroundColor = .blue
        v.center = self.view.center
        return v
    }()

    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.backgroundColor = .lightGray
        self.view.addSubview(box)
        box.layer.cornerRadius = 8

    }

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        fireEvent()
        super.touchesBegan(touches, with: event)
    }

    func fireEvent(){
        if box.transform == .identity{
            //to animate larger
            UIView.animate(withDuration: 1, delay: 0, usingSpringWithDamping: 0.2,initialSpringVelocity: 10, options: [.curveEaseInOut, .allowUserInteraction], animations: {
                self.box.transform = CGAffineTransform(scaleX: 1.2, y: 1.2)
            }, completion: nil)
        }else{
            //animate smaller
            UIView.animate(withDuration: 1, delay: 0, usingSpringWithDamping: 0.2, initialSpringVelocity: 10, options: [.curveEaseInOut, .allowUserInteraction], animations: {
                self.box.transform = .identity
            }, completion: nil)
        }
    }
}
...