README.md in geomotion-0.0.2 vs README.md in geomotion-0.1

- old
+ new

@@ -1,47 +1,152 @@ # Geomotion -iOS geometry is too verbose for Ruby. Geomotion tries to fix that. +iOS Geometry in idiomatic Ruby. Exhaustively tested. What's not to love? -## Usage +## Features +### CGRect + ```ruby -# More idiomatic initializer +# Initializers rect = CGRect.make(x: 10, y: 100, width: 50, height: 20) +another_way = CGRect.make(origin: CGPoint, size: CGSize) -# These do what you think +# Getters [rect.x, rect.y, rect.width, rect.height] => [10, 100, 50, 20] -# Chainable methods for adjusting frames +rect_zero = CGRect.empty +=> CGRect(0, 0, 0, 0) +rect_zero.empty? +=> true + +rect.center +=> CGPoint(25, 10) # center as bounds +rect.center(true) +=> CGPoint(35, 110) # center as frame + +# Operator Overloading +rect + CGRect.make(x: 9, y: 99, width: 10, height: 10) +=> CGRect(9, 99, 50, 20) # == union of rects + +rect + CGSize.new(11, 1) +=> CGRect(10, 100, 61, 21) # == increases the size, but keeps the origin + +rect + CGPoint.new(10, 10) +=> CGRect.new(20, 110, 50, 20) + +rect + UIOffsetMake(10, 10) +=> CGRect.new(20, 110, 50, 20) + +a_point + a_size +=> CGRect # a point and a size make a rectangle. makes sense, right? + +# Union and Intersection +rect.union_with CGRect.new(9, 99, 10, 10) +=> CGRect(9, 99, 50, 20) + +rect.intersection_with CGRect.new(9, 99, 10, 10) +=> CGRect.new(10, 100, 10, 10) + +# Growing and shrinking +# The center stays the same. Think margins! +rect.grow(CGSize.new(10, 20)) +=> CGRect.new(5, 90, 60, 40) + +rect.shrink(10) +=> CGRect.new(15, 105, 40, 10) + +# Powerful layout adjustments with chainable methods view = UIView.alloc.initWithFrame rect.below.width(100).height(10) view.frame -=> #<CGRect origin=#<CGPoint x=10.0 y=120.0> size=#<CGSize width=100.0 height=10.0>> +=> CGRect(10, 120, 100, 10) view2 = UIView.alloc.initWithFrame rect.beside(10) view2.frame -=> #<CGRect origin=#<CGPoint x=70.0 y=100.0> size=#<CGSize width=50.0 height=20.0>> +=> CGRect(70, 100, 50, 20.0) +# More examples of adjustments +rect = CGRect.make(x: 10, y: 100, width: 50, height: 20) [rect.right(20).x, rect.left(20).x, rect.up(20).y, rect.down(20).y] => [30, -10, 80, 120] +# Layout "above" and "before" rectangles +# (default offset is the rectangle's width or height) +rect.before(5) +=> CGRect.new(-45, 100, 50, 20) +rect.before(5, width:20) +=> CGRect.new(-15, 100, 20, 20) + +rect.above(5) +=> CGRect.new(10, 75, 50, 20) +rect.above(5, height:10) +=> CGRect.new(10, 85, 50, 10) + # Layout a rect relative to others -rect2 = CGRect.new [50, 50], [100, 100] -rect3 = CGRect.new [100, 200], [20, 20] +rect2 = CGRect.make(x: 50, y: 50, width: 100, height: 100) +rect3 = CGRect.make(x:100, y: 200, width: 20, height: 20) CGRect.layout(rect, above: rect2, right_of: rect3) -=> #<CGRect origin=#<CGPoint x=120.0 y=30.0> size=#<CGSize width=50.0 height=20.0>> +=> CGRect(120, 30, 50, 20) # Also supports margins CGRect.layout(rect, above: rect2, right_of: rect3, margins: [0, 0, 10, 15]) -=> #<CGRect origin=#<CGPoint x=135.0 y=20.0> size=#<CGSize width=50.0 height=20.0>> +=> CGRect(135, 20, 50, 20) + ``` +### CGSize + +```ruby +# Initializers +size = CGSize.make(width: 50, height: 20) + +# Getters +size_zero = CGSize.empty +=> CGSize(0, 0) +size_zero.empty? +=> true + +# Operator Overloading +size + CGSize.make(width: 100, height: 50) +=> CGSize(150, 70) + +size + CGPoint.make(x: 10, y: 30) +=> CGRect(10, 30, 50, 20) + +# Combine with CGPoint +size.rect_at_point CGPoint.make(x: 10, y: 30) +=> CGRect(10, 30, 50, 20) +``` + +### CGPoint + +```ruby +# Initializers +point = CGPoint.make(x: 10, y: 100) + +# Operator Overloading +point + CGPoint.make(x: 20, y: 40) +=> CGPoint(30, 140) + +point + CGSize.make(width: 50, height: 20) +=> CGRect(10, 100, 50, 20) + +# Combine with CGSize +point.rect_of_size CGSize.make(width: 50, height: 20) +=> CGRect(10, 100, 50, 20) + +# Combine with CGRect +point.inside? CGRect.make(x: 0, y: 0, width: 20, height: 110) +=> true +``` + ## Install 1. `gem install geomotion` -2. Add `require geomotion` in your `Rakefile`. +2. Add `require 'geomotion'` in your `Rakefile`. ## Forking If you have cool/better ideas, pull-request away! \ No newline at end of file