gpt4 book ai didi

objective-c - NSCell 上的动画

转载 作者:行者123 更新时间:2023-12-03 16:22:34 24 4
gpt4 key购买 nike

我正在尝试为 NSOutlineView 中的某些单元格设置动画。我需要制作一个图标动画,以作为左侧面板上设备旁边的 iTunes 同步图标进行旋转。

我在动画领域并没有真正的经验,我通过浏览互联网找到了这个简单的解决方案:

- (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"];
}
}

我在这个解决方案中遇到的问题是 NSCell 的不同子类都没有我可以使用的 CALayer。因此,首先我决定对 NSCell 进行子类化,添加包含 CALayer 的 NSImageView。动画有效,但体验很糟糕, ImageView 效率极其低下,我几乎无法滚动,而且动画只能在其中一行中起作用。

我现在想做的是子类 NSButtonCell (我需要为单元格设置一个操作,否则它会是一个 NSImageCell),重写 drawWithFrame 方法并向 NSView 添加一个 subLayer (controlView )接收并为其设置动画。

现在的问题是动画不起作用。

我把代码留给你了。

请帮忙!

- (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];
}

提前致谢。

米基万。

最佳答案

编辑:此答案仅适用于 iOS - 原始问题适用于 OSX

<小时/>

我建议使用UIImageViewanimationImagesanimationDuration属性。 (我相信这本质上就是 Apple 为其 UIActivityIndi​​cator 类所做的事情。)这应该比不断重新计算旋转图像更便宜/性能更好。

因此,使用图像编辑器并按顺序旋转位置保存图标的多个“帧”,并使用它们填充 animationImages 属性的数组。

关于objective-c - NSCell 上的动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6793098/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com