Re: UICollectionView Moving
Re: UICollectionView Moving
- Subject: Re: UICollectionView Moving
- From: Luke Hiesterman <email@hidden>
- Date: Tue, 08 Mar 2016 05:54:48 +0000
- Thread-topic: UICollectionView Moving
By teaching a cell to respond to an attribute I merely meant that it should override setLayoutAttributes: and do something in there with the relevant property. Hope that helps.
Luke
On Mar 7, 2016, at 9:39 PM, Luther Baker <email@hidden<mailto:email@hidden>> wrote:
> teach your cell classes to respond to that property
Want to think about this out loud. Wondering what would 'trigger' a lookup on the layout's layoutAttributesForItemAtIndexPath ... and where would I store the indexPath I am dragging around.
If I were to be more literal - in my view controller, I handle the UIGestureRecognizerState.Began event. At this point, I can get the indexPath of the element I am about to move and if I change something on that cell at that time, it sticks for the life of the drag without reference to layoutAttributes. I also handle the UIGestureRecognizerState.Changed event and again, if I retrieve the cell at the gesture's locationInView and change things in it ... those changes stick until I let go of the drag.
Stepping into the custom layout for a minute ... as you suggested, I am now implementing layoutAttributesForInteractivelyMovingItemAtIndexPath ... and that is getting invoked in response to the updateInteractiveMovementTargetPosition call I am making as the gesture location changes. Now, I know the collection view's methods are triggering the layout's callbacks - but I'm not sure what would trigger me to fetch the custom attributes you are suggesting. At a minimum, to ask the layout for the attributes at that indexPath, I'd have to actually be tracking the 'selectedIndexPath' in which case, I could just get the cell and modify it directly.
I guess I'm wondering how to "teach my cells classes to respond to that property" ... Cells are reused so I'm not even sure how I'd go about setting up and tearing down a KVO type relationship for the specific cell I am dragging around. Maybe there is a WWDC video that digs into this? or it's an easy explain?
Sorry for being so long-winded. I'm not sure I'm communicating my question well. Hope you can understand my underlying question and nudge me the right way but at any rate, thanks for your help so far. I'd love to use an elegant, "made for CollectionView" solution ... but I don't think I'm looking at it correctly yet. Just in general I guess, how can a change to the layoutAttributes cause my CollectionViewDelegate and DataSources to fetch the cell I'm dragging around and change it (or does it not require the delegates or datasources ... ?)
Thanks,
-Luther
On Mon, Mar 7, 2016 at 2:45 PM, Luke Hiesterman <email@hidden<mailto:email@hidden>> wrote:
You can create your own subclass of UICollectionViewLayoutAttributes and add something like an “isMoving” property to that. Then teach your cell classes to respond to that property by changing the background color.
Luke
On Mar 7, 2016, at 11:44 AM, Luther Baker <email@hidden<mailto:email@hidden>> wrote:
Thanks Luke! That was it - I can drag and drop successfully now.
One more question, how do I modify a property of the item I'm dragging around if the property is NOT currently in UICollectionViewLayoutAttributes ... I don't see a call to the datasource or delegate when I select the cell for moving ... so I'm not sure how to change the background color to "red" for instance.
Would I have to add my own view to the superview and manually move it around in the dragging callbacks?
Thanks!
-Luther
On Mon, Mar 7, 2016 at 11:59 AM, Luke Hiesterman <email@hidden<mailto:email@hidden>> wrote:
I’d check your return value for this method in your layout:
- (UICollectionViewLayoutAttributes *)layoutAttributesForInteractivelyMovingItemAtIndexPath:(NSIndexPath *)indexPath withTargetPosition:(CGPoint)position NS_AVAILABLE_IOS(9_0);
Luke
On Mar 7, 2016, at 9:55 AM, Luther Baker <email@hidden<mailto:email@hidden>> wrote:
I followed the directions here,
http://nshint.io/blog/2015/07/16/uicollectionviews-now-have-easy-reordering/
- to add iOS9 style dragging to my UICollectionView - and it sort of works.
As described in the article, I added a long press gesture recognizer and
wired it in to make calls on the collection view -- but now, if I long
press, the element under my finger disappears. As I drag the transparent
image around, the other elements shift - but I can never see the element I
am dragging around. When I let go, there is simply a hole left where I
"dropped" the element.
I do, very much, have a custom layout and I'm not sure that if, for drag, I
need to do anything special. Do I need to calculate the frame of the item I
am dragging around? I'm not sure what to try next except to roll my own
dragging. Any thoughts or things to try?
Thanks in advance.
_______________________________________________
Cocoa-dev mailing list (email@hidden<mailto: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<http://lists.apple.com/>
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden<mailto:email@hidden>
_______________________________________________
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