Xcode: 9.2。
macOS目标: 10.13
当父NSToolbar被隐藏然后显示时,NSImageView似乎会丢失添加到其图层的任何动画。
有没有办法指示AppKit动手/恢复动画状态?
示例代码
$('select[name="state"]').on('change', function(){
let $state = $(this);
let $regionSelect = $('select[name="region"]');
$regionSelect.empty(); // remove all options from the region
// loop our hidden divs to find matching regions by state selected val
$('.hidden-regions > div').each(function(){
let $region = $(this);
// if our data-state attribute matches the selected state value
if ($region.data('state') === $state.val()) {
$state.append('<option value="'+ $region.data('region') +'">'+ $region.data('region') +'</option>');
}
});
});
答案 0 :(得分:1)
通常,当从屏幕上的图层树中删除图层时,动画被视为“已完成”。默认情况下,动画完成时会从其图层中删除动画。 AppKit从窗口中删除工具栏视图(及其所有子视图及其图层),因此动画被视为已完成并从其图层中删除。
要保持动画的安装,您可以将动画的isRemovedOnCompletion
设置为false
。
import Cocoa
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
@IBOutlet weak var window: NSWindow!
@IBOutlet var customItem: NSToolbarItem!
func applicationDidFinishLaunching(_ aNotification: Notification) {
let view = customItem.view!
view.wantsLayer = true
let layer = view.layer!
let frame = layer.frame
layer.anchorPoint = CGPoint(x: 0.5, y: 0.5)
layer.frame = frame
let animation = CABasicAnimation(keyPath: "transform.rotation")
animation.fromValue = CGFloat(0)
animation.toValue = 2 * CGFloat.pi
animation.duration = 1
animation.repeatCount = .infinity
animation.isRemovedOnCompletion = false
layer.add(animation, forKey: animation.keyPath)
}
}
结果: