In this challenge you'll implement the half-way dragged anchor point for the draggable controller.
This is a companion discussion topic for the original entry at https://www.raywenderlich.com/5298-reproducing-popular-ios-controls/lessons/30
In this challenge you'll implement the half-way dragged anchor point for the draggable controller.
I’m having some trouble with the search view jumping around when I am dragging it. Sometimes it snaps to fully open, and back to where my finger is in a split second, which feels very jarring. I thought it was maybe something I hadn’t done correctly when following the videos, but downloaded the sample code and it’s doing it in that too. Anyone else have this issue?
Testing on iPhone X device btw
Yeah, I’m having the same issue
It happens when you interrupt the animation. This is becuase you only update the draggablePosition
when animatingPosition == .end
.
You can calculate the new draggablePosition
before interrupting the animation and update animatingPosition
with the result.
How to make map interactive when draggable controller is in collapsed or half state?
I am trying to pan on the map but it seems that interactions to presenting controller are disabled.
Hey!
I responded to a very similar question here: Reproducing Popular iOS Controls - Part 29: | Ray Wenderlich Videos - #6 by leamars
It should solve your problems
@mennabah’s answer is correct!
In the animate(to position:)
method in the DraggablePresentationController
change this part:
animator.addCompletion { (animatingPosition) in
if animatingPosition == .end {
self.draggablePosition = position
}
}
With:
draggablePosition = position
I am facing multiple issues while compiling it with xCode 10 beta, issue like NSLayoutConstraint, UIButton with type and more… Not able to to compile the AppStore animation source code… (Sequence : 27), Can you help?
@leamars Can you please help with this when you get a chance? Thank you - much appreciated! :]
Hi @vinaychopra, could you be a little more specific about the issues you’re getting? Maybe post the full error message. Are you sure you’re compiling with Swift 4+? I just did a fresh install of Xcode 10, Beta 6 and downloaded the project files from this video and both the starter & final project compile and run just fine for me.
@leamars is it possible to have a version where the location table view will scroll once it reaches the top most scroll point?
That’s definitely possible, but out of the scope of this video, unfortunately.
Could you point me in a direction to get that started? Would I have to turn off the pan gesture for the transition once you reach the top to allow the table view to scroll? Or somehow forward those events to the table views pan gesture recognizer?
@leamars Do you have any feedback about this? Thank you - much appreciated! :]
Hey! I think there’s probably a couple of different approaches you can take.
For example, one could be that you could track the scrolling on the presentation controller, and once we know it has reached the top, you send a notification to the tableview that:
This is if you’re talking about making sure that there’s scrolling feedback not the tableview at the top stopping point, as in… once you scroll to the top, the presentation controller stops, but the table view will absorb (= show) the scrolling the user might be expecting to see.
If you’re talking about simply making sure that the tableView knows how to scroll, I recommend turning off and on the multiple gesture recognition on the presentation controller by conforming to the UIGestureRecognizerDelegate. So you’d again need some sort of mechanism to communicate the fact that the presentation controller has reached the top TO the tableView.
When the presentation controller reaches the top of the table view you ENABLE tableView scrolling AND presentationController scrolling. If the tableView gets scrolled up, you should DISABLE presentationController scrolling, as the user would only expect to be moving the tableView as they dragged down, but when the tableView reached its top again, you have to make sure to ENABLE the presentationController scrolling so from that point on the user can scroll down = drag down the presentation controller, or scroll up = drag up the tableView.
I hope this helped and made sense! Let me know if things are still unclear and I’ll try to explain myself better
hey @leamars ! you are a rock star !! thanks for all the fixes and tricks to this video to make it better
I fully understand you, in theory =) Can you please help with this in practice:
Thanks =))
Ok, little brainstorm time and that’s what I’ve got:
Add special function to DraggablePresentationController, that’s on/off tableView Interaction by position
private func tableInteraction(position: DraggablePosition) {
if let view = presentedViewController as? LocationsViewController {
if position == .open {
view.tableView.isUserInteractionEnabled = true
} else {
view.tableView.isUserInteractionEnabled = false
}
}
}
add this code to and of userDidPan method:
tableInteraction(position: draggablePosition)
Add check code, if table is scrolled full up in extension of LocationsViewController: UITableViewDelegate
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if (scrollView.contentOffset.y < 0) {
tableView.isUserInteractionEnabled = false
}
}
But it is some lags: you need pull up table view twice - first time is’t check that, table view is scrolled up and turn off userInteraction. In second swipe I can interact with presentation methods.
Some have any idea how make it in one scroll?
@leamars Can you please help with this when you get a chance? Thank you - much appreciated! :]
Could you update source code to support Scrolling on TableViewController?