2016-12-04 2 views
0

Я сделал свой собственный UIView, который отображает метку в левом верхнем углу UIView вместе с некоторыми границами.UIView анимация фонового затухания не работает

Внутри пользовательского UIView (AdventDoor), я создал метод под названием animateChanges(). Это то, что внутри метода:

func animateChanges() 
{ 
    UIView.animate(withDuration: 1.5, animations: { 
     self.layer.backgroundColor = UIColor.white.cgColor 
    })   
} 

Начальный цвет этой точки зрения является UIColor.red, что я хочу, чтобы цвет фона, чтобы исчезнуть до белого в течение 1,5 секунд, однако, фон скачет на белом мгновенно без анимация.

Это то, что находится внутри моего метода рисования:

override func draw(_ rect: CGRect) { 
    if(self.tag < 25) 
    { 
     doorNumber.text = "\(self.tag)" 
    } else { 
     doorNumber.text = "25" 
    } 
    self.addSubview(doorNumber) 
} 

Как бы я сделать взгляды фона цвет увядает от красного до белого? Я также попытался изменить UIView.animate на AdventDoor.animate

Я также добавил код self.backgroundColor = UIColor.clear перед кодом UIView.animation и по какой-то причине анимация работает. Единственная проблема заключается в том, что я хочу, чтобы он исчезал от красного до белого, а не от белого до белого.

ответ

0

Обычно он должен работать для просмотра. Но если ваша точка зрения основано на UILabel, то смотрите здесь: How to animate the background color of a UILabel?

+0

Благодарим вас за ответ. Я хочу изменить фон представления, а не ярлык. Я просто добавил ярлык там, чтобы вы знали, почему у меня есть свой пользовательский UIView. Я также обновил свой код, поскольку обнаружил что-то странное для UIColor.clear. Мой взгляд также основан на UIView – iProgram

0

Я подготовить для вас какой-то площадки кода:

import UIKit 
    import PlaygroundSupport 


    let sideLenght = 200 
    let viewFrame = CGRect(x: 0, y: 0, width: sideLenght, height: sideLenght) 

    let baseView = UIView(frame: viewFrame) 
    baseView.backgroundColor = UIColor.white 

    let shapeLayer = CAShapeLayer() 
    shapeLayer.frame = viewFrame 

    let commonAnimationDuration = 1.5 
    baseView.layer.addSublayer(shapeLayer) 

// Great looking transition from one color to another is performed using CABasicAnimation 
    let fade = CABasicAnimation(keyPath: "backgroundColor") 
    fade.fromValue = UIColor.red.cgColor // From color 
    fade.toValue = UIColor.white.cgColor // To color 
    fade.duration = commonAnimationDuration 
    fade.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseOut) 

    shapeLayer.add(fade, forKey: "shapeLayerbackgroundColor") 

    PlaygroundPage.current.liveView = baseView 

для того чтобы увидеть мои отрезали может, копировать/вставить код на свою игровую площадку и открытым помощник редактор (см вложение)

enter image description here

Имея эти советы, вы должны быть в состоянии переместить/настроить код для ваших нужд.

0

Я просто играл с кодом, и я исправил проблему.

Это код, который я использовал, чтобы исправить анимацию:

func animateChanges() 
{ 
    print("Animations enabled\(AdventDoor.areAnimationsEnabled)") 
    self.backgroundColor = UIColor.clear 
    self.layer.backgroundColor = UIColor.red.cgColor 
    AdventDoor.animate(withDuration: 1.5, animations: { 
     self.layer.backgroundColor = UIColor.white.cgColor 
     //self.backgroundColor = UIColor.white 
    }) 

} 

По какой-то причине, я должен был установить self.backgroundColor в UIColor.clear, а затем установить self.layer.backgroundColor в UIColor.white.cgColor.

Я понятия не имею, почему это работает, но эй, у меня есть работа сейчас. Если кто-то хотел бы объяснить, почему, пожалуйста, не стесняйтесь.

Смежные вопросы