Попробуйте, хотя это может быть не единственной проблемой.Если это представление коллекции, мне нужно было бы увидеть вашу ячейку для функции строки, так как вы можете загружать ячейку с перепутанными границами для начала.Вот предложение, хотя.Вместо этого анимируйте преобразование.
//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)
}
}
}