Posts tagged CocoaHeads
UIView Manipulation Made Easier with a Category
Jul 27th
I was watching a presentation recently where the presenter showed the header for a category that he had added to UIView to make his life a little easier. The point of the talk did not center around the category so I never saw much more than the header, but that was all I needed to recreate it for my use. Here’s the header:
#import <uikit/UIKit.h> @interface UIView (MFAdditions) - (id) initWithParent:(UIView *)parent; + (id) viewWithParent:(UIView *)parent; // Position of the top-left corner in superview's coordinates @property CGPoint position; @property CGFloat x; @property CGFloat y; // Setting size keeps the position (top-left corner) constant @property CGSize size; @property CGFloat width; @property CGFloat height; @end
As you can see there isn’t a whole lot to this category, but if you’re doing a lot of view manipulation the benefits of it will rapidly become clear. There was one sticky wicket that I hit when implementing this class and it centers around this method:
+ (id) viewWithParent:(UIView *)parent;
When I first implemented this method I wrote it like so:
+ (id) viewWithParent:(UIView *)parent { return [[[UIView alloc] initWithParent:parent] autorelease]; }
This was all well and good as long as the only class that I was creating was a UIView, but I ran into trouble when I started creating UIImageViews. Instantiating new UIImageViews worked fine, but as soon as I called a UIImageView-specific method the app would crash:
*** -[UIView setImage:]: unrecognized selector sent to instance 0xd1b350
I struggled with the answer to this one for a while and it wasn’t until I presented my problem to the local CocoaHeads group did I get it all figured out. Here’s the correct way to write this method:
+ (id) viewWithParent:(UIView *)parent { return [[[self alloc] initWithParent:parent] autorelease]; }
By calling self instead of strongly typing the returned object as a UIView the class would dynamically determine the correct type at runtime.
You can download this category here: UIViewAdditions
NSNotification & NSNotificationCenter
Jan 28th
Below you will find the slides and accompanying sample project that I presented at the January 2008 CocoaHeads meeting in Syracuse, NY. I posted both the Keynote presentation and the PDF export of said presentation. Because it was an informal gathering I decided to use a few of the Keynote transitions that are fun, but maybe a little over the top. If this kind of thing bugs you, rock out the PDF version, it just has the slides.
Also, during the meeting a few folks asked about playing sounds and doing speech synthesis, so you will see simple examples of those technologies used in the sample project as well.
NSNotification and NSNotificationCenter (zipped up Keynote version)
NSNotification and NSNotificationCenter (PDF version)
