Latest 1.0.0
License MIT
Platforms ios 8.0, requires ARC
Authors ,


iOS Curve Interpolation consists of two main components:

  • A category on UIBezierCurvePath, UIBezierCurvePath+Interpolation.
  • A small iOS app that demonstrates the categories use.


#include "UIBezierCurvePath+Interpolation.h"

const char *encoding = @encode(CGPoint);

NSMutableArray *array = [NSMutableArray new];

// Add 4 CGPoints as NSValue
[array addObject:[NSValue valueWithBytes:&CGPointMake(0.0, 0.0) objCType:encoding];
[array addObject:[NSValue valueWithBytes:&CGPointMake(0.0, 1.0) objCType:encoding];
[array addObject:[NSValue valueWithBytes:&CGPointMake(1.0, 1.0) objCType:encoding];
[array addObject:[NSValue valueWithBytes:&CGPointMake(1.0, 0.0) objCType:encoding];

UIBezierPath *path = interpolateCGPointsWithCatmullRom:array closed:NO alpha:0.5;
// Use the path


To add an easy-to-use category for curve interpolation onto UIBezierPath. Also to provide a small iOS app for demonstrating/testing the interpolation inputs (Hermite vs. Catmull-Rom, alpha value effects, and open/closed option).


Clone the repo, open the Xcode project in Xcode 5+.

The UIBezierPath+Interpolation.h/.m is standalone, provided you also include CGPointExtension.h/.m (which are also included in the Xcode project).

API Reference

// pointsAsNSValues must be NSValue objects containing CGPoints.
// ex:
//     const char *encoding = @encode(CGPoint);
//     NSValue *pointAsValue = [NSValue valueWithBytes:&cgPoint objCType:encoding];

// 0.0 <= alpha <= 1.0
+(UIBezierPath *)interpolateCGPointsWithCatmullRom:(NSArray *)pointsAsNSValues closed:(BOOL)closed alpha:(float)alpha;
+(UIBezierPath *)interpolateCGPointsWithHermite:(NSArray *)pointsAsNSValues closed:(BOOL)closed;

Latest podspec

    "name": "ios-curve-interpolation",
    "version": "1.0.0",
    "summary": "Easy-to-use category for curve interpolation onto UIBezierPath",
    "homepage": "",
    "authors": {
        "John Fisher": "",
        "Alexis Creuzot": ""
    "license": {
        "type": "MIT"
    "source": {
        "git": "",
        "tag": "1.0.0"
    "requires_arc": true,
    "platforms": {
        "ios": "8.0"
    "source_files": [

Pin It on Pinterest

Share This