Hi,

If you have a fixed set of images you're repeatedly flipping through you can have CoreAnimation do the animation for you, something like this:

      CAKeyframeAnimation *anim;
      NSMutableArray *images;
      CGImageRef im;
      int i;

      images = [NSMutableArray array];
      for (i = 0; i < N; i++) {
          im = create_image (i);
          [images addObject:(id)im];
          CGImageRelease (im);
      }

      anim = [CAKeyframeAnimation animation];
      [anim setKeyPath:@"contents"];
      [anim setValues:images];
      [anim setCalculationMode:@"discrete"];
      [anim setRepeatCount:HUGE_VAL];
      [anim setDuration:1.0];

      [layer addAnimation:anim];

since this runs completely in the background render thread it has a better chance of not dropping frames and should use less CPU than doing the same thing from a timer. You'll need to change the duration value to match your number of images and desired frame rate,

        John


On Aug 2, 2008, at 3:13 PM, Joseph Heck wrote:

I've been doing exactly this recently, and have had excellent success with using CALayers (Core Animation). An NSTimer with a fast repeat rate is triggering a method that assigns in one of an array of CGImageRef's to the layer's contents property has made for a really decent "flipbook" style of animation. I've been able to get 60 frames per second without issue.

I believe you can load up the CGImageRef's from NSImage through CGBitmapContext and CGBitmapContextCreateImage. I've been working with a *cough* different framework to get the images and display them - one that's significantly less powerful than a standard Mac desktop - but the throughput has been effectively the same.

-joe

On Aug 2, 2008, at 3:01 PM, Charles Steinman wrote:
--- On Sat, 8/2/08, Matt R <[EMAIL PROTECTED]> wrote:

I have read through Apple's drawing optimization guide
and have been
searching for a way of speeding these operations up, they
are unacceptably
slow. I have several 72dpi PNG image files (about 1024x768
each) which I
need to draw repeatedly into a standard NSView subclass
over time. I would
like to avoid using OpenGL directly if possible, it seems
like there should
be a faster way of drawing these other than NSImage's
draw or composite
methods.

You might try a CGLayer. It's designed for fast repeated drawing.

Cheers,
Chuck

_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/jsh%40apple.com

This email sent to [EMAIL PROTECTED]

_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to [EMAIL PROTECTED]

Reply via email to