2015-05-10 15 views
6

ja nie potrafię usunąć animację z majątku mojego CAShapeLayer strokeEnd.mogę zmienić właściwość strokeEnd bez animacji?

Dokumentacja mówi, że nieruchomość jest animatable ale to nie jest animowana domyślnie i nie można zidentyfikować problem. Wszelkie sugestie, gdzie szukać?

Oto mój kod:

class ViewController: UIViewController { 

    let circle = CAShapeLayer() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     // Circle 
     circle.fillColor = UIColor.clearColor().CGColor 
     circle.strokeColor = UIColor.blackColor().CGColor 
     circle.lineWidth = 10 
     circle.strokeEnd = 0 
     circle.lineJoin = kCALineJoinRound 
     circle.path = UIBezierPath(ovalInRect: CGRectMake(60, 140, 200, 200)).CGPath 
     circle.actions = ["strokeEnd" : NSNull()] 

     // Show Button 
     let showButton = UIButton(frame: CGRectMake(40, 40, 240, 40)) 
     showButton.addTarget(self, action: "showButton", forControlEvents: UIControlEvents.TouchUpInside) 
     showButton.setTitle("Show circle", forState: UIControlState.Normal) 
     showButton.backgroundColor = UIColor.greenColor() 

     // Add to view 
     self.view.layer.insertSublayer(circle, atIndex: 1) 
     self.view.addSubview(showButton) 
    } 

    func showButton() { 
     circle.strokeEnd = 1 
    } 
} 

CAShapeLayer strokeEnd animation

+0

Jaki jest sens "circle.actions = [" strokeEnd ": NSNull()]'? – idmean

+0

Widocznie CAShapeLayer posiada akcje domyślne (animacji) na jego właściwości .. – Tieme

+0

- Usunięto rozwiązanie z pytaniem i dodaje je do poniższej odpowiedzi .. – Tieme

Odpowiedz

14

opisać ustawiania działania strokeEnd warstwy do NSNull podejście działa, ale jest to trochę z młotem. Kiedy to zrobisz, zabijasz niejawną animację właściwości strokeEnd twojej warstwy na zawsze.

Jeśli to, co chcesz, to jest ok. Ja jednak preferują przy użyciu drugiego podejścia, że ​​David Rönnqvist list w odpowiedzi pan powiązany: Dokonywanie zmian warstwa wewnątrz CATransaction rozpoczyna/commit blok. Oto kod tego z odpowiedzi Davida (który jest doskonały, ponieważ jego posty są zawsze).

[CATransaction begin]; 
[CATransaction setDisableActions:YES]; 
// change your property here 
yourShapeLayer.strokeEnd = 0.7; 
[CATransaction commit]; // animations are disabled until here... 

Ten kod znajduje się w polu Cel C. Tłumaczenie go na Swift nie jest złe:

CATransaction.begin() 
CATransaction.setDisableActions(true) 
yourShapeLayer.strokeEnd = 0.7 
CATransaction.commit() 
+0

Tak, masz rację. Dzięki. – Tieme

+0

@ Tieme, powinieneś zaakceptować swoją odpowiedź lub moją, aby inni czytelnicy wiedzieli, że znalazłeś rozwiązanie. –

+0

Przepraszam, wczoraj byłem trochę zajęty. – Tieme

Powiązane problemy