how to implement iphoto like animation while doing drag and drop on custom listview
how to implement iphoto like animation while doing drag and drop on custom listview
- Subject: how to implement iphoto like animation while doing drag and drop on custom listview
- From: Muthulingam Ammaiappan <email@hidden>
- Date: Thu, 07 Mar 2013 14:28:59 +0800
Hi Friends,
i had developed the custom list view which is having NSView as a cell with
variable sizes to represent the video clips in the timeline.
and i had implemented the drag and drop for reordering functionality...
that is working as per the expectation...
but i wanted to add the animation while doing the drag and drop like in
"iPhoto"...
(when user drag the item if the mouse co-ords enters the in between region
then the corresponding elements will animate... and animation will end and
it comeback its original position once the mouse left the coords)....
here i am including the drag and drop code.... please help me how i can
implement the above mentioned animation while doing drag and drop...
Thanks & Regards,
Muthu
- (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender
{
NSDragOperation theOperation = NSDragOperationNone;
self.highlightForDragAcceptance = YES;
BOOL dropHighlight = _highlightForDragAcceptance;
downLocation = [self convertPoint: [sender draggingLocation] fromView:
[self superview]];
dropindex = [self indexOfCellAtPoint:downLocation];
theOperation = [timelineViewController validateDrop:sender proposedCell:
dropindex
proposedDropHighlight: dropHighlight];
return theOperation;
}
- (NSDragOperation)draggingUpdated:(id <NSDraggingInfo>)sender
{
NSDragOperation theOperation = NSDragOperationNone;
self.highlightForDragAcceptance = YES;
BOOL dropHighlight = _highlightForDragAcceptance;
currentLocation = [self convertPoint: [sender draggingLocation] fromView:
[self superview]];
NSUInteger _numberOfCells = [[timelineViewController collection] count];
NSArray * sprites = [timelineViewController collection];
dropindex = [self indexOfCellAtPoint:currentLocation];
theOperation = [timelineViewController validateDrop:sender proposedCell:
dropindex
proposedDropHighlight: dropHighlight];
return theOperation;
}
- (void)draggingExited:(id <NSDraggingInfo>)sender
{
#pragma unused(sender)
self.highlightForDragAcceptance = NO;
}
- (BOOL)prepareForDragOperation:(id<NSDraggingInfo>)sender
{
sender.animatesToDestination = YES;
return YES;
}
- (BOOL)performDragOperation:(id <NSDraggingInfo>)sender
{
BOOL highlight = _highlightForDragAcceptance;
BOOL accepted = [timelineViewController acceptDrop:sender cellindex:
dropindex dropHighlight:highlight];
self.highlightForDragAcceptance = NO;
return accepted;
}
- (void)concludeDragOperation:(id <NSDraggingInfo>)sender
{
#pragma unused(sender)
}
- (void)draggingEnded:(id <NSDraggingInfo>)sender
{
#pragma unused(sender)
self.highlightForDragAcceptance = NO;
[self deselectSelectedObjects];
}
- (BOOL)wantsPeriodicDraggingUpdates
{
return YES;
}
- (BOOL)writeCellsWithIndexes:(NSIndexSet*)indexes toPasteboard:(
NSPasteboard *)dragPasteboard
{
[dragPasteboard declareTypes: [NSArray arrayWithObjects:
NSStringPboardType, nil] owner: self];
[dragPasteboard setString: @"Just Testing" forType: NSStringPboardType];
return YES;
}
- (NSDragOperation)validateDrop:(id <NSDraggingInfo>)info proposedCell:(
NSUInteger)index
proposedDropHighlight:(BOOL)dropHighlight;
{
return NSDragOperationCopy;
}
- (BOOL)acceptDrop:(id <NSDraggingInfo>)info cellindex:(NSUInteger)index
dropHighlight:(BOOL)dropHighlight
{
NSLog(@"Accept Drop");
NSLog(@"selection index:%i",[spritesController selectionIndex]);
NSLog(@"drop index:%i",index);
MVSprite *temp = [collection objectAtIndex: [spritesController
selectionIndex]];
[spritesController removeObjectAtArrangedObjectIndex:[spritesController
selectionIndex]];
[spritesController insertObject:temp atArrangedObjectIndex:index];
NSArray * sprites = [self collection];
int count = [sprites count];
//layout the subviews
for (int i=0; i<count; i++)
{
MVSprite * current = [sprites objectAtIndex:i];
if(i == 0)
{
current.start = 0;
current.end = current.start + current.duration;
[current setAnimate:YES];
[current.spriteView setSpriteViewFrame];
}else{
MVSprite * previous = [sprites objectAtIndex:i-1];
current.start = previous.end;
current.end = current.start + current.duration;
[current setAnimate:YES];
[current.spriteView setSpriteViewFrame];
}
}
}
_______________________________________________
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