Skip to content

An incremental linear constraint-solving algorithm (Auto Layout) in Swift.

License

Notifications You must be signed in to change notification settings

inamiy/Cassowary

Folders and files

NameName
Last commit message
Last commit date

Latest commit

b4d1c2b · Sep 16, 2017

History

4 Commits
Sep 15, 2017
Sep 15, 2017
Sep 15, 2017
Sep 15, 2017
Sep 15, 2017
Sep 15, 2017
Sep 15, 2017
Sep 15, 2017
Sep 15, 2017
Sep 15, 2017
Sep 15, 2017
Sep 16, 2017

Repository files navigation

Cassowary

An incremental linear constraint-solving algorithm (Auto Layout) in Swift, originally from the paper: Solving Linear Arithmetic Constraints for User Interface Applications (1997)

This repository consists of 3 frameworks:

  • Simplex: Simplex tableau and its common operations
  • Cassowary: Core constraint-solving algorithm using Simplex
  • CassowaryUI: UIKit/AppKit wrapper on top of Cassowary

How to use

CassowaryUI

import Cassowary
import CassowaryUI

let rootSize = CGSize(width: 320, height: 480)
var solver = CassowaryUI.Solver()

try! solver.addConstraints(view1, view2) { v1, v2 in
    return [
        // `v1` has fixed size (4:3 aspect ratio)
        v1.width == rootSize.width - 40,
        v1.height == v1.width * 3 / 4,

        // `v2` has fixed origin.x & width (flexible in vertical)
        v2.width == v1.width,
        v1.centerX == rootFrame.width / 2,
        v2.centerX == v1.centerX,

        // equal spacing (vertical)
        v1.top == 40 ~ .high,
        v2.top - v1.bottom == v1.top ~ .high,
        rootSize.height - v2.bottom == v1.top ~ .high,
    ]
}
solver.applyLayout()

This will result:

<UIView: 0x7f8f1ee018c0; frame = (0 0; 320 480); layer = <CALayer: 0x608000220800>>
   | <UIView: 0x7f8f21001010; frame = (20 40; 280 210); layer = <CALayer: 0x60c000220da0>>
   | <UIView: 0x7f8f1ec015c0; frame = (20 290; 280 150); layer = <CALayer: 0x60c000220840>>

Acknowledgments

References

License

MIT

About

An incremental linear constraint-solving algorithm (Auto Layout) in Swift.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages