Cocoa focus ring color animation

只谈情不闲聊 提交于 2019-12-24 00:24:56

问题


I want to use a focus ring animation as an indicator of incorrect data in field. So I'm sending becomeFirstResponder: to field and want focus ring to fade from red to default color.

I'm wrestling with Core Animation but still have not found any way to do it. Is it possible?


回答1:


I'm not sure if this strategy follows the HIG, its often more common to do something like display a persistent icon indicating a field doesn't validate next to the field, but it shouldn't be too hard to get the effect you're seeking.

It might be easier to use a simple NSAnimation here instead of using Core Animation. The standard code for drawing a focus ring generally goes something like the following:

[NSGraphicsContext saveGraphicsState];
NSSetFocusRingStyle(NSFocusRingOnly);
[[NSColor clearColor] set];
[[NSBezierPath bezierPathWithRect:focusRect] fill];
[NSGraphicsContext restoreGraphicsState];

This code would be implemented in the drawRect: method in custom subclass of your control.

In order to draw a custom colored focus ring, you'll need to draw the rectangle yourself, and won't be able to benefit from the NSSetFocusRingStyle function. The color would be driven off of the NSAnimation, which would also set the control to repaint itself. Because you're not using Cocoa's facilities to draw the focus ring, you'll also probably need to inset the content of your view so you'll have space to draw the ring.

More information regarding NSAnimations is available in the Animation Programming Guide for Cocoa



来源:https://stackoverflow.com/questions/1049405/cocoa-focus-ring-color-animation

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!