2013-08-29 14 views
7

Ich versuche, den Eckenradius eines Knopfes (OpenNoteVisible.layer) auf die folgende Art und Weise zu ändern:Ändern corner mit Core Animation

CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"cornerRadius"]; 
animation.timingFunction = [CAMediaTimingFunction  functionWithName:kCAMediaTimingFunctionLinear]; 
animation.fromValue = [NSNumber numberWithFloat:10.0f]; 
animation.toValue = [NSNumber numberWithFloat:0.0f]; 
animation.duration = 1.0; 
[animation.layer setCornerRadius:140.0]; 
[OpenNoteVisible.layer addAnimation:animation forKey:@"cornerRadius"]; 

Aber dieser Code gibt an der Linie einen Fehler [animation.layer setCornerRadius : 140,0]; Ich kann nicht verstehen warum. Ich habe Quartz-Core-Framework importiert.

+0

Sie den Eckenradius auf Tasten einstellen. Verwenden Sie also Schaltflächenobjekte – SRI

Antwort

20

Sie legen den Eckenradius für die Layer-Eigenschaft des Animationsobjekts fest; Dieses Animationsobjekt verfügt nicht über eine Ebeneneigenschaft.

Sie müssen den Eckenradius auf der Ebene des Objekts festlegen, das Sie animieren möchten, in diesem Fall OpenNoteVisible. Sie müssen auch sicherstellen, dass toValue des Animationsobjekts mit dem Wert übereinstimmt, den Sie auf der Ebene festlegen, andernfalls erhalten Sie seltsame Animationen.

Ihr Code sollte jetzt sein:

CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"cornerRadius"]; 
animation.timingFunction = [CAMediaTimingFunction  functionWithName:kCAMediaTimingFunctionLinear]; 
animation.fromValue = [NSNumber numberWithFloat:10.0f]; 
animation.toValue = [NSNumber numberWithFloat:140.0f]; 
animation.duration = 1.0; 
[OpenNoteVisible.layer setCornerRadius:140.0]; 
[OpenNoteVisible.layer addAnimation:animation forKey:@"cornerRadius"]; 
0

Swift 4 Lösung unter

import UIKit 
import PlaygroundSupport 

let view = UIView(frame: CGRect(x: 0, y: 0, width: 400, height: 400)) 
view.backgroundColor = #colorLiteral(red: 1, green: 0.5763723254, blue: 0, alpha: 1) 
PlaygroundPage.current.liveView = view 

UIView.animate(withDuration: 2.5, animations: { 
    view.layer.cornerRadius = 40 
}, completion: { _ in 
    UIView.animate(withDuration: 0.5, animations: { 
     view.layer.cornerRadius = 0 
    }) 
})