How to use IKImagebrowserView's group display?

1k views Asked by At

The effect I want is like the iPhoto group(or timeline) displaying.

enter image description here

I have already realized the common IKImageBrowserView. which is like enter image description here

But I don't know how to assign them in different groups.

I referred: customizing IKImageBrowserView group appearance, which is the only post in stackoverflow, maybe.

I used the 4 methods of IKImageBrowserDataSource.

- (NSUInteger)numberOfItemsInImageBrowser:(IKImageBrowserView *)browser;
- (id)imageBrowser:(IKImageBrowserView *)browser itemAtIndex:(NSUInteger)index;
- (NSUInteger)numberOfGroupsInImageBrowser:(IKImageBrowserView *)browser;
- (NSDictionary *)imageBrowser:(IKImageBrowserView *)browser groupAtIndex:(NSUInteger)index;

I think I don't know how to write code for the last 2 methods.

1

There are 1 answers

3
Dale Beck On BEST ANSWER

You definitely need to implement those last two methods for groups to appear. If you simply want to see the effect, you can do something like this:

- (NSUInteger) numberOfGroupsInImageBrowser:(IKImageBrowserView *) aBrowser
{
    return 1;
}
- (NSDictionary *) imageBrowser:(IKImageBrowserView *) aBrowser groupAtIndex:(NSUInteger) index
{
    NSRange r = {0, 3};
    return @{IKImageBrowserGroupRangeKey: [NSValue valueWithRange:r],
             IKImageBrowserGroupBackgroundColorKey: [NSColor redColor],
             IKImageBrowserGroupStyleKey: [NSNumber numberWithInt:IKGroupDisclosureStyle]};
}

The important key in the directory returned by groupAtIndex is IKImageBrowserGroupRangeKey. This describes what range of images are in a given group. Note that NSRange is a structure and is not derived from NSObject so it can't be used as a value in a dictionary. Hence, it must be converted to an NSValue.

For this to be truly useful you'll want to cache your set of range values and provide a mechanism for grouping and ungrouping images, but I hope this is enough to get you started