Что ж, одна из идей заключается в том, что у нас есть один вид поверх вашего изображения, полностью охватывающий его. Давайте назовем это представление V. Переместите это представление вниз на 1 пункт, чтобы линия вашего изображения была видна. Затем создайте другой вид поверх вашего изображения, полностью покрывая его. Давайте назовем это представление H. Затем переместим это представление вправо на 1 пункт. Теперь один пиксель (или, точнее, сетка точек 1x1) вашего изображения выставлен.
Мы будем анимировать H вправо. Когда он достигнет конца, мы вернем его на место, переместим V и H на 1 пункт и повторим процесс.
Вот кое-что, с чего можно начать.
extension UIView {
/**
- Parameter seconds: the time for one line to reveal
*/
func scanReveal(seconds: Double) {
let colour = self.superview?.backgroundColor ?? UIColor.black
let v = UIView(frame: self.bounds)
v.backgroundColor = colour
self.addSubview(v)
let h = UIView(frame: self.bounds)
h.backgroundColor = colour
self.addSubview(h)
v.frame.origin.y += 1
// Animate h to the end.
// When it reaches the end, bring it back, move v and h down by 1 and repeat.
func move() {
UIView.animate(withDuration: seconds, animations: {
h.frame.origin.x = h.bounds.height
}) { _ in
h.frame.origin.x = 0
h.frame.origin.y += 1
v.frame.origin.y += 1
if v.frame.origin.y > self.bounds.height {
return
}
move()
}
}
move()
}
}