Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 28 additions & 11 deletions lib/motion-layout/layout.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
module Motion
class Layout
def initialize(&block)
def initialize(delegate = nil, &block)
@delegate = delegate
@verticals = []
@horizontals = []
@metrics = {}
Expand All @@ -13,20 +14,36 @@ def metrics(metrics)
@metrics = metrics
end

def subviews(subviews)
@subviews = subviews
def subviews(*subviews)
if subviews[0].is_a? Hash
@subviews = subviews.subviews[0]
elsif (subviews[0].is_a?(String) || subviews[0].is_a?(Symbol)) and @delegate
@subviews = {}
subviews.each do |v|
if @delegate.respond_to?(v)
@subviews[v.to_s] = self.send(v)
elsif @delegate.instance_variable_defined? "@#{v}"
@subviews[v.to_s] = @delegate.instance_variable_get "@#{v}"
else
raise "Couldn't find method or instance variable '#{v}' on the delegate"
end
end
else
raise "subviews only accepts a hash or an array (if delegate is defined)"
end

end

def view(view)
@view = view
end

def horizontal(horizontal)
@horizontals << horizontal
def horizontal(horizontal, options = NSLayoutFormatDirectionLeadingToTrailing)
@horizontals << [horizontal, options]
end

def vertical(vertical)
@verticals << vertical
def vertical(vertical, options = NSLayoutFormatDirectionLeadingToTrailing)
@verticals << [vertical, options]
end

private
Expand All @@ -38,11 +55,11 @@ def strain
end

constraints = []
constraints += @verticals.map do |vertical|
NSLayoutConstraint.constraintsWithVisualFormat("V:#{vertical}", options:NSLayoutFormatAlignAllCenterX, metrics:@metrics, views:@subviews)
constraints += @verticals.map do |vertical, options|
NSLayoutConstraint.constraintsWithVisualFormat("V:#{vertical}", options:options, metrics:@metrics, views:@subviews)
end
constraints += @horizontals.map do |horizontal|
NSLayoutConstraint.constraintsWithVisualFormat("H:#{horizontal}", options:NSLayoutFormatAlignAllCenterY, metrics:@metrics, views:@subviews)
constraints += @horizontals.map do |horizontal, options|
NSLayoutConstraint.constraintsWithVisualFormat("H:#{horizontal}", options:options, metrics:@metrics, views:@subviews)
end

@view.addConstraints(constraints.flatten)
Expand Down