Re: UICollectionView Moving
Re: UICollectionView Moving
- Subject: Re: UICollectionView Moving
- From: Luther Baker <email@hidden>
- Date: Tue, 08 Mar 2016 00:05:46 -0600
Now we're cooking with GAS!!!!!!!
override func applyLayoutAttributes(layoutAttributes:
UICollectionViewLayoutAttributes) {
print("apply layout attributes!: \(titleLabel.text)")
}
Thanks Man!
-Luther
On Mon, Mar 7, 2016 at 11:54 PM, Luke Hiesterman <email@hidden> wrote:
> 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> 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>
> 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> 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>
>> 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> 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)
>>>
>>> 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
>>>
>>>
>>>
>>
>>
>
_______________________________________________
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