Skip to content

GlebRadchenko/AmazingBubbles

Repository files navigation

AmazingBubbles

Bubble pickers, inspired by Apple

Requirements:

  • iOS 9.1+
  • XCode 8.0+
  • Swift 3.0

Installation

AmazingBubbles Library is available through CocoPods. To install, add the following line to your Podfile:

pod 'AmazingBubbles', '~> 0.0'

Usage:

  1. Import library as follows:
import AmazingBubbles
  1. Add ContentBubblesView to your VC;
  2. Add delegate and dataSource for ContentBubblesView instance:
class ViewController: UIViewController {

  @IBOutlet weak var bubblesView: ContentBubblesView! {
      didSet {
          bubblesView.delegate = self
          bubblesView.dataSource = self
      }
  }
  
}
  1. Implement protocols :
public protocol ContentBubblesViewDelegate: class {
    func minimalSizeForBubble(in view: ContentBubblesView) -> CGSize
    func maximumSizeForBubble(in view: ContentBubblesView) -> CGSize
    
    func contentBubblesView(_ view: ContentBubblesView, didSelectItemAt index: Int)
    func contentBubblesView(_ view: ContentBubblesView, shouldChangeSizeForItemAt index: Int) -> Bool
    func contentBubblesView(_ view: ContentBubblesView, didChangeSizeForItemAt index: Int)
}

public protocol ContentBubblesViewDataSource: class {
    func countOfSizes(in view: ContentBubblesView) -> Int
    
    func numberOfItems(in view: ContentBubblesView) -> Int
    func addOrUpdateBubbleView(forItemAt index: Int, currentView: BubbleView?) -> BubbleView
}

for example:

extension ViewController: ContentBubblesViewDataSource {
    func countOfSizes(in view: ContentBubblesView) -> Int {
        return 3
    }
    
    func numberOfItems(in view: ContentBubblesView) -> Int {
        return 15
    }
    
    func addOrUpdateBubbleView(forItemAt index: Int, currentView: BubbleView?) -> BubbleView {
        var view: BubbleView = currentView ?? BubbleView()        
        view.backgroundColor = .clear
        let randomOrigin = CGPoint(x: CGFloat(drand48() * Double(self.view.frame.width * 2 / 3)),
                                   y: CGFloat(drand48() * Double(self.view.frame.height * 2 / 3)))
        view.frame = CGRect(origin: randomOrigin,
                            size: .zero)
        return view
    }
}
  1. And than call:
bubblesView.reload(randomizePosition: true) 

Additional features:

  • You can create custom views by subclassing BubbleView
  • You can enable/disable gestures in ContentBubblesView:
bubblesView.tapEnabled = true
bubblesView.panEnabled = false
  • Also you can change some settings in BubbleConstants struct or play with some settings of UIDynamicBehaviors.

About

Bubble pickers, inspired by Apple

Resources

License

Stars

Watchers

Forks

Packages

No packages published