Apple описывает в своих документах по анимации:
"В iOS анимации широко используются для изменения положения видов, изменения их размера, удаления их из иерархий представлений и их скрытия."
Просмотр руководства по программированию - Apple
В статье продолжается довольно сильный акцент на использовании Core Animations, а не UIView Animations для более детальной анимации.
"В местах, где вы хотите выполнять более сложные анимации или анимации, не поддерживаемые классом UIView, вы можете использовать Core Animation и базовый слой представления для создания анимации. Поскольку объекты представления и слоя тесно связаны друг с другом, изменения в слое вида влияют на сам вид. "
Таким образом, по сути, вы манипулируете слоем вида, чтобы изменить вид. Я не думаю, что разумно манипулировать видом напрямую, когда для этой цели существуют основные анимации. Таким образом, вы не можете (и, вероятно, не должны) делать с UIView с UIAnimations то, что вы можете делать со слоем с Core Animations.
Вы должны сделать анимацию с CoreAnimation
. Следовательно, ваш blinkAnimation()
метод будет,
func blinkAnimation(){
let fadein = CABasicAnimation(keyPath: "opacity")
fadein.fromValue = 1.0
fadein.toValue = 0.0
fadein.duration = 0.5
fadein.autoreverses = true
fadein.repeatCount = HUGE
maskingView.layer.add(fadein, forKey: "opacity")
}
Вот полный код,
let gradient = CAGradientLayer()
gradient.colors = [UIColor.red.cgColor, UIColor.blue.cgColor]
gradient.startPoint = CGPoint(x: 0.0, y: 0.5)
gradient.endPoint = CGPoint(x: 1.0, y: 0.5)
gradient.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 30)
maskingView = btnGradient
// function for animation
blinkAnimation()
let tap = UITapGestureRecognizer(target: self, action: #selector(self.goToOtherView(gesture:)))
tap.delegate = self as! UIGestureRecognizerDelegate
tap.numberOfTapsRequired = 1
self.maskingView.isUserInteractionEnabled = true
self.maskingView.addGestureRecognizer(tap)
maskingView.layer.insertSublayer(gradient, at: 0)
Метод выбора жестов касания:
@objc func goToOtherView(gesture: UITapGestureRecognizer) {
print("tap gesture selector called")
}