Platform:
  • iOS 10.0 and above
  • iPhone 5 and newer, iPad 2 and newer
Languages Used:
  • Swift
Software tools used:
  • XCode 8
Technologies and concepts used:
  • UIKit
  • Core Animation
  • CocoaPods
  • Interface Builder
External links:
SpinWheelControl is a UI Control that can be plugged into any iOS project and can be adapted for many different uses.
Click image to enlarge.

Description

After creating and publishing four iOS apps, I decided to try my hand at creating my own CocoaPod framework. I decided to port to Swift and make my own enhancements to the Objective-C SMWheelControl CocoaPod.

SpinWheelControl, created in Swift, is an inertial spinning wheel UI control that allows selection of an item. By providing a custom data source, a developer can specify how many wedges they would like the wheel to have and custom text to be displayed inside each wedge.



Lessons learned and obstacles overcome

After having used several different CocoaPods in my own projects, it was nice to learn how to create my own. There were many concepts that I needed to master in order to get this framework published.

I had to learn the many different command-line commands that were necessary in order to check the CocoaPod for errors (lint) and then push it to the CocoaPods.org website.

This project was also my first foray into creating IBDesignable classes and IBInspectable properties. This provides the user much more flexibility by letting them drag and drop a SpinWheelControlView to a view controller in Interface Builder, then easily configure properties from the GUI interface. I really enjoy this feature of Xcode and will surely utilize this more in the future.

I also got the opportunity to learn how to write Swift code that would be usable in Objective-C. Some of it was subtle changes in the code, such as the @objc keyword, while other steps included changing flags and settings within the Xcode compiler.

SpinWheelControl is still a work in progress. I hope to add many features and expand my knowledge of framework development at the same time.