A view in the form of a popup balloon. UIBezierPath initializer included!


A customizable & animatable view for a popup balloon that has mathematically correct smooth corners. Also provides access to a UIBezierPath.

Screen Shot 2021-06-04 at 14 11 37

Screen Shot 2021-06-04 at 14 24 57

Screen Shot 2021-06-04 at 14 26 05


This library allows one to create a UIBezierPath for a popup balloon, with a stem and a rounded rectangle. The balloon has mathematically correct smoothed corners and can be customized.

There's also BalloonShapeView that is a view with an animatable balloon.


Balloons can be configured by setting the properties on a BalloonConfiguration object:

  • cornerRadius The corner radius of the balloon, either .oval for an oval or .fixed(value) or none for no rounded corners.

  • stem: the configuration of the stem, with the following properties:

    • edge the edge the stem is attached to: .bottom, .top, .left or .right
    • offset The stem is, by default, centered in the edge. Use this to offset it. A positive offset moves the stem to the right (or down), a negative one moves it to the left (or up)
    • size the size of the stem.
    • cornerSmoothening How to smooth the corners between the stem and the edge it i attached to. Either enabled, disabled or custom(widthRatio, heightRatio).
    • tipSmoothenWidth how much we should smoothen the tip of the stem, in points. 0 means that the tip is sharp, the larger the value, the more the tip is smoothened with an arc.


    To create a UIBezierPath balloon, you can call:

    UIBezierPath.init(balloonInRect:configuration:) with the rect you want the balloon to fit in and the balloon's configuration. The whole balloon and stem will fit inside the given rect.

You can also call UIBezierPath.init(balloonWithRect:configuration), which will make a balloon path where the stem is outside of the given rect.


If you need a balloon as a view, use BalloonShapeView.


Configure the balloon using the configuration parameter or the convenience properties such as stemWidth, stemHeight, cornerRadius, stemOffset. The convenience properties are also accessible from InterfaceBuilder.


To animate changes to the configuration, call layoutIfNeeded() in an animation block:

UIView.animateWithDuration(0.25) {
	// modify configuration
	balloonView.configuration.cornerRadius = .fixed(40)

Fill, Stroke and Colors.

BalloonShapeView exposes most properties of CAShapeLayer such as fillColor and strokeColor and lineWidth.


  • Swift Tools 5.3.0
View More Packages from this Author


  • None
Last updated: Sun Dec 04 2022 06:49:32 GMT-0500 (GMT-05:00)