Infinite Scrolling Dial Control for iOS
For a long time, I remember posts from people asking for an infinitely scrolling UIScrollView or a looping UITableView etc. I’ve been meaning to make such a component and turn it into an easy to use control and I finally got around to doing it. The result is called DialController and is an infinitely scrolling and looping table view, populated by strings. Multilpe DialControllers can also be wired together to create MultiDialControllers, as you can see in the demo video below. It’s essentially a looping UIPickerView but with any custom content needed.
I hope this is useful to people looking for that kind of functionality. It’s available, along with an example project showing the usage of multiple dials at once, on GitHub in a new repo where I hope I will some day manage to gather my most useful components.

Thank you!
This code is a life saver.
I figured I shouldn’t even bother trying to customize UIPickerView to do this.
Now I just need to figure out how best to make the dial spin horizontally instead of vertically.
I wonder if that will be impossible since it’s a UITableView.
Glad you find this useful!
About making it horizontal… To be honest, I’ve never turned a UITableView 90 degrees, but if that works fine then this code should be *almost* fine. It will probably need a few tweaks as well to be rotation-independent. If you actually give this a try please let me know if you run into any issues and I can try to have a look too.
And of course let me know when your app is out, I’d love to see it put to good use
It’s working great so far using CGAffineTransformMakeRotation to rotate the table view first, and then rotate each cell back the other way.
However, for some reason, in your example, I can’t access self.tableView.frame from within cellForRowAtIndexPath or snap. The frame property always comes out nil. This is preventing me from being able to create spinners of any desired dimensions. It still works, despite all those values being nil or 0, but I have to hardcode values, which is, of course, icky.
Argh. I wasn’t casting to int when logging and debugging, so it said it didn’t exist at all. Real helpful, Apple.
Thank you very much,
i desired this method
Thanks heaps!!
Exactly what I needed
You have a good one Sir!