On 12 Jul 2016, at 19:11, William Squires <[email protected]> wrote:
> 
> Normally, of course, models shouldn't know anything about UI, and vice versa, 
> but what about when the models themselves represent something visual that the 
> UI needs to draw...

[snip]

> In this case, it makes sense that the object with the information needed to 
> draw, is the model object itself…

[snip]

> So, in my app, the view's drawRect: method will [snip] ask for all the model 
> objects that are visible within its bounds rect [snip] and will then iterate 
> over them, asking them to draw themselves, now that the graphics context is 
> properly set up.

This is the direct approach, and it’s a perfectly valid way to do things.  The 
other option is to implement a Renderer object that uses the Visitor pattern 
(which, in a dynamic language like Objective-C, you might implement by 
dynamically generating the method name on the basis of the class name passed 
in; or in a static language like C++ or Swift, you might choose to do it by 
overloading a “draw” method).  The direct way is usually faster; the Visitor 
approach has the advantage that you can easily implement different renderers 
without all the model objects needing to know what to do.

> The question is, if my GameObject (base class) defines a drawRect(bounds: 
> CGRect) itself, and the code in the UIView subclass' drawRect: method passes 
> a CGRect (which is within it's own bounds) to the model's drawRect:, will the 
> code in the model's drawRect: "see" the graphics context of the UIView, so 
> that you can set the stroke or fill color using the setStroke() and setFill() 
> methods on UIColor, as well as anything else that may require that context, 
> such as lower-level calls to CoreGraphics?

Yes.  Cocoa keeps track of the current graphics context.

Kind regards,

Alastair.

--
http://alastairs-place.net


_______________________________________________

Cocoa-dev mailing list ([email protected])

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to