• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Trouble with NSAnimationContext
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Trouble with NSAnimationContext


  • Subject: Trouble with NSAnimationContext
  • From: Shamyl Zakariya <email@hidden>
  • Date: Tue, 24 Mar 2009 07:26:25 -0400

Hi,

I'm writing a custom NSCollectionView from scratch, since I can't figure out how to extend NSCollectionView in some specific ways. So, I've got the layout technique I need working, and superficially, things are going smoothly. However, I tried to use NSAnimationContext to set an animation duration, and all I get is a hard freeze. According to Shark, it would appear to be dead locking in a spin lock...


0.0% 73.5% CategoryView start
0.0% 73.5% CategoryView main
0.0% 73.5% AppKit NSApplicationMain
0.0% 72.7% AppKit -[NSApplication run]
0.0% 72.6% AppKit -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:]
0.0% 72.6% AppKit _DPSNextEvent
0.0% 72.6% HIToolbox BlockUntilNextEventMatchingListInMode
0.0% 72.6% HIToolbox ReceiveNextEventCommon
0.0% 72.6% HIToolbox RunCurrentEventLoopInMode
0.0% 72.6% CoreFoundation CFRunLoopRunInMode
0.0% 72.6% CoreFoundation CFRunLoopRunSpecific
0.0% 72.5% Foundation __NSFireTimer
0.0% 72.5% AppKit -[NSAnimationManager animationTimerFired:]
0.0% 72.5% AppKit -[NSInFlightAnimation advanceToTime:]
0.0% 72.5% QuartzCore -[CABasicAnimation applyForTime:presentationObject:modelObject:]
0.0% 72.5% AppKit -[NSView setValue:forKeyPath:]
0.0% 72.5% Foundation -[NSObject(NSKeyValueCoding) setValue:forKeyPath:]
0.0% 72.5% Foundation -[NSObject(NSKeyValueCoding) setValue:forKey:]
0.0% 72.5% Foundation _NSSetUsingKeyValueSetter
0.0% 72.5% AppKit -[NSView setFrameOrigin:]
0.0% 72.5% AppKit -[NSView _postFrameChangeNotification]
0.0% 72.5% Foundation -[NSNotificationCenter postNotificationName:object:]
0.0% 72.5% Foundation -[NSNotificationCenter postNotificationName:object:userInfo:]
0.0% 72.5% CoreFoundation _CFXNotificationPostNotification
0.0% 72.5% CoreFoundation __CFXNotificationPost
0.0% 72.5% Foundation _nsnote_callback
0.0% 72.5% CategoryView -[CategoryView frameSizeChanged:]
0.0% 72.5% CategoryView -[CategoryView updateLayout]
0.0% 72.5% AppKit +[NSAnimationContext endGrouping]
0.0% 72.5% AppKit - [NSAnimationContext(NSInternal) _flushAnimations]
0.0% 66.6% AppKit -[NSAnimationManager startAnimation:forObject:keyPath:targetValue:]
66.6% 66.6% libSystem.B.dylib __spin_lock
5.9% 5.9% libSystem.B.dylib __spin_lock


My class is "CategoryView" -- it's like an NSCollectionView but with the contents filtered into separate regions by NSPredicates.

Here's my updateLayout method. This is called when the contents of the collection change, or when the view frame size changes. Note that this is very crude code, since I only started writing this custom layout view last night. For example, I've hard coded item size to 128x128.

- (void) updateLayout
{
NSSize itemSize = NSMakeSize(128,128),
layoutSize = [self frame].size;

NSPoint origin = NSMakePoint( 0, [self bounds].size.height - itemSize.height );

[NSAnimationContext beginGrouping];
[[NSAnimationContext currentContext] setDuration: 0.5];


	for ( NSString* category in categoryNames )
	{
		for ( CategoryItemView *item in [self viewsForCategory: category] )
		{
			if ( origin.x + itemSize.width > layoutSize.width )
			{
				origin.x = 0;
				origin.y -= itemSize.height;
			}

			[[item animator] setFrameOrigin: origin];
			origin.x += itemSize.width;
		}

		origin.x = 0;
		origin.y -= itemSize.height;
	}

	[NSAnimationContext endGrouping]; // freezes here
}

Any ideas? I'm a little new to animation in Cocoa, so if I'm doing something wildly wrong I'm all ears. The docs for NSAnimationContext describe pretty much exactly the usage scenario I'm in...

Note, the above code works *without* NSAnimationContext. I just want to be able to simply set the animation duration to be nice and quick.


shamyl zakariya - squamous and rugose



_______________________________________________

Cocoa-dev mailing list (email@hidden)

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:
This email sent to email@hidden


  • Follow-Ups:
    • Re: Trouble with NSAnimationContext
      • From: Shamyl Zakariya <email@hidden>
  • Prev by Date: Identifying disks/volumes by a unique ID?
  • Next by Date: Re: NSObliquenessAttributeName, labelFontOfSize, & Italic
  • Previous by thread: Re: Identifying disks/volumes by a unique ID?
  • Next by thread: Re: Trouble with NSAnimationContext
  • Index(es):
    • Date
    • Thread