I have an NSWindowController driving a window, with a view, with subviews. One of the subviews is an NSView *imageParentView. This view's only purpose is to provide a frame, a "bounding box" inside which its subview will be held. It's one and only subview is NSImageView *imageView.

The purpose is for imageView -- which displays a 1700x800 image -- to move around inside of imageParentView, which limits things to a "peephole" view of a 100x100 area. Thus, I create a flip-book style animation from a larger image. Elsewhere in the main view, I have a slider and some controls to move "next/prev", etc.

Below is the code I call after my animationFrame variable has been updated (say, by the NEXT or PREV buttons.) My problem is: SOME OF THE TIMES, it all works, and works perfectly. But SOMETIMES, I'll run the app, and I'll see the 1st image but, after advancing the counter, subsequent images do not redraw. This works/does-not-work dichotomy does not require code or xib changes -- sometimes I just give up on it for a day, come back the next day, and everything works fine.

My animationFrameLabel -- the thing that tells me which "frame" (column/row of the bigger image) should be displaying -- updates, so I know all the code is happening.

On the times when the updates are not visible, even covering and uncovering the window (hoping to force a redraw) does not help.

...But sometimes the program just works flawlessly.

Am I missing some key call?  What's going on?

Thanks!

        --- Code ---

 - (void)displayAnimationFrame {
    int xx = (animationFrame % animationColumns);
    int yy = (animationFrame / animationColumns);

[animationFrameLabel setStringValue:[NSString stringWithFormat:@"{ %d, %d }", xx, yy]];

    [self adjustAnimationSlider];

    // Move imageView within imageParentView
    NSRect iParentViewFrame = imageParentView.frame;
    CGFloat xStart = iParentViewFrame.size.width  * xx;
    CGFloat yStart = iParentViewFrame.size.height * yy;

    NSRect imageViewBounds = imageView.bounds;
    imageViewBounds.origin.x = xStart;
    imageViewBounds.origin.y = yStart;
NSLog(@"origin: %0.1f,%0.1f", imageViewBounds.origin.x, imageViewBounds.origin.y); NSLog(@"..size: %0.1fx%0.1f", imageViewBounds.size.width, imageViewBounds.size.height);
    [imageView setBounds:imageViewBounds];

    [imageView setNeedsDisplay];
    [imageParentView setNeedsDisplay:YES];
 }


        --- Log output ---

2009-07-02 15:09:49.756 app[35064:10b] origin: 100.0,0.0
2009-07-02 15:09:49.757 app[35064:10b] ..size: 1699.8x799.9
2009-07-02 15:09:50.267 app[35064:10b] origin: 200.0,0.0
2009-07-02 15:09:50.268 app[35064:10b] ..size: 1699.8x799.9
2009-07-02 15:09:50.533 app[35064:10b] origin: 300.0,0.0
2009-07-02 15:09:50.533 app[35064:10b] ..size: 1699.8x799.9
2009-07-02 15:09:50.715 app[35064:10b] origin: 400.0,0.0
2009-07-02 15:09:50.715 app[35064:10b] ..size: 1699.8x799.9
2009-07-02 15:09:50.907 app[35064:10b] origin: 500.0,0.0
2009-07-02 15:09:50.907 app[35064:10b] ..size: 1699.8x799.9
2009-07-02 15:09:51.093 app[35064:10b] origin: 600.0,0.0
2009-07-02 15:09:51.093 app[35064:10b] ..size: 1699.8x799.9

_______________________________________________

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 arch...@mail-archive.com

Reply via email to