Ich versuche, einige der Zellen in meinem NSOutlineView zu animieren. Ich brauche ein Symbol zu animieren, wie die iTunes-Synchronisierung-Symbol neben dem Gerät, auf dem linken Panel zu drehen.
Ich bin nicht wirklich erfahren auf dem Gebiet der Animation, aber ich habe diese einfache Lösung gefunden, indem ich im ganzen Internet gesucht habe:
- (void)startAnimation:(CALayer *)layer {
CABasicAnimation *spinAnimation = (CABasicAnimation *)[layer animationForKey:@"spinAnimation"];
if (!spinAnimation) {
spinAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
spinAnimation.toValue = [NSNumber numberWithFloat:-(5*2*M_PI)];
spinAnimation.duration = 10;
spinAnimation.repeatCount = 10000;
[spinAnimation setRemovedOnCompletion:YES];
[spinAnimation setSpeed:2.0f];
[layer addAnimation:spinAnimation forKey:@"spinAnimation"];
}
}
Das Problem, das ich mit dieser Lösung habe, ist, dass keine der verschiedenen Unterklassen von NSCell einen CALayer hat, mit dem ich arbeiten kann. Also habe ich zunächst beschlossen, NSCell Unterklasse Hinzufügen einer NSImageView, die eine CALayer enthält. Die Animation funktionierte, aber die Erfahrung war schrecklich, die Bildansicht war unglaublich ineffizient, ich konnte kaum scrollen und die Animation funktionierte nur in einer der Zeilen.
Was ich versuche, jetzt zu tun ist Unterklasse NSButtonCell (ich brauche, um eine Aktion auf die Zelle zu setzen, sonst wäre es ein NSImageCell gewesen), überschreiben die drawWithFrame-Methode und fügen Sie eine subLayer der NSView (controlView) erhalten und dann animieren es.
Das Problem im Moment ist, dass die Animation nicht funktioniert.
Ich überlasse Ihnen den Code.
PLZ HELP!.
- (void)setObjectValue:(id<NSCopying>)obj {
@try {
[super setImage:[NSImage imageNamed:@"syncImage.png"]];
[super setObjectValue:nil];
}
@catch (NSException *exception) {
NSLog(@"CustomImageViewCell-setObjectValue: %@", [exception description]);
[self setImage:nil];
[super setObjectValue:nil];
}
}
- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {
[super drawWithFrame:cellFrame inView:controlView];
if (![controlView layer]) {
CALayer *layer = [CALayer layer];
[layer setFrame:[controlView frame]];
[controlView setLayer:layer];
}
CALayer *layer = [CALayer layer];
[layer setFrame:cellFrame];
[[controlView layer] addSublayer:layer];
[self startAnimation:layer];
}
Vielen Dank im Voraus.
Mikywan.