FROM : John Stiles
DATE : Thu Mar 06 23:19:27 2008
Ken Ferry wrote:
> On Thu, Mar 6, 2008 at 2:06 PM, John Stiles <<email_removed>> wrote:
>
>> Ken Ferry wrote:
>> On Thu, Mar 6, 2008 at 9:59 AM, John Stiles <<email_removed>> wrote:
>>
>>
>> On Leopard, this solution works perfectly. I get a chance to update my
>> view right before it draws, which is exactly what the doctor ordered.
>>
>> Any way to get this on Tiger or am I just out of luck?
>>
>> Out of luck. Well, you can do the work in -drawRect:, but if any of
>> the work you do invalidates display, it'll be delicate code (meaning
>> it may be hard to get it to work right, or relatively fragile between
>> releases). It might be good to implement a -resolveInvalidatedStuff
>> method, then call it from both -viewWillDraw and -drawRect:. Then, on
>> Leopard, you'll never actually be doing any work in drawRect: because
>> you will have already resolved all state. If it works on Tiger at
>> that point, great, and if not, any further tricky work you do is
>> targeting an unchanging OS. Make sense?
>>
>>
>> Hmm. What I'm doing is almost certainly going to invalidate display, so I
>> am probably just out of luck for Tiger.
>>
>> If there was some bulletproof solution that could be made to work under
>> Tiger, that would have been nice, but it's not a big deal. I don't currently
>> anticipate this code being used under Tiger. I just like to write things so
>> that we could use them as far back as reasonably possible, in case plans
>> change. I guess if that does happen, I can bring back the old code and Tiger
>> users can live with the controls-changing-after-display behavior that we had
>> before.
>>
>
> Note that implementing -viewWillDraw won't keep your code from running
> on Tiger, the method just won't get called. That's what I was getting
> at with the hybrid drawRect:/viewWillDraw approach.
>
>
Right. So I can leave it implemented, but for Tiger, I can check the
AppKit version and if it's below the Leopard value, I can call my method
via -performSelector:withObject:afterDelay: and get the same effect. It
just will have a brief "blink." I suppose I could also experiment with
disabling screen updates to get past that hurdle.
Honestly, for now, it's probably not all that important... I'll just
accept that Tiger has limitations, and if I end up needing to target
Tiger after all, I'll worry about it then. For now I'll stay focused on
Leopard.
Thanks for your suggestions; I appreciate the help!
DATE : Thu Mar 06 23:19:27 2008
Ken Ferry wrote:
> On Thu, Mar 6, 2008 at 2:06 PM, John Stiles <<email_removed>> wrote:
>
>> Ken Ferry wrote:
>> On Thu, Mar 6, 2008 at 9:59 AM, John Stiles <<email_removed>> wrote:
>>
>>
>> On Leopard, this solution works perfectly. I get a chance to update my
>> view right before it draws, which is exactly what the doctor ordered.
>>
>> Any way to get this on Tiger or am I just out of luck?
>>
>> Out of luck. Well, you can do the work in -drawRect:, but if any of
>> the work you do invalidates display, it'll be delicate code (meaning
>> it may be hard to get it to work right, or relatively fragile between
>> releases). It might be good to implement a -resolveInvalidatedStuff
>> method, then call it from both -viewWillDraw and -drawRect:. Then, on
>> Leopard, you'll never actually be doing any work in drawRect: because
>> you will have already resolved all state. If it works on Tiger at
>> that point, great, and if not, any further tricky work you do is
>> targeting an unchanging OS. Make sense?
>>
>>
>> Hmm. What I'm doing is almost certainly going to invalidate display, so I
>> am probably just out of luck for Tiger.
>>
>> If there was some bulletproof solution that could be made to work under
>> Tiger, that would have been nice, but it's not a big deal. I don't currently
>> anticipate this code being used under Tiger. I just like to write things so
>> that we could use them as far back as reasonably possible, in case plans
>> change. I guess if that does happen, I can bring back the old code and Tiger
>> users can live with the controls-changing-after-display behavior that we had
>> before.
>>
>
> Note that implementing -viewWillDraw won't keep your code from running
> on Tiger, the method just won't get called. That's what I was getting
> at with the hybrid drawRect:/viewWillDraw approach.
>
>
Right. So I can leave it implemented, but for Tiger, I can check the
AppKit version and if it's below the Leopard value, I can call my method
via -performSelector:withObject:afterDelay: and get the same effect. It
just will have a brief "blink." I suppose I could also experiment with
disabling screen updates to get past that hurdle.
Honestly, for now, it's probably not all that important... I'll just
accept that Tiger has limitations, and if I end up needing to target
Tiger after all, I'll worry about it then. For now I'll stay focused on
Leopard.
Thanks for your suggestions; I appreciate the help!






Cocoa mail archive

