I'm trying to refactor my code in the best possible way and I'm wondering what the proper architecture for the given situation is.
What I'm Trying To Do
What I'm doing is pretty simple: I have some custom CALayer
subclasses that represent an interactive UI element. They are broken up into multiple layers since some of the parts of the UI are static, so I didn't want to redraw those static elements needlessly. Right now, the layers are added as sublayers in the initialization part of a CustomView
class that is a subclass of UIView
.
There is currently no corresponding CustomViewController
class that is a subclass of UIViewController
because when I'm using the CustomView
, it's contained within a UITableViewCell
or a part of a generic UIViewController
with other views in it, so I felt another UIViewController
for each CustomView
instance would be redundant.
Also of importance is the that the only operation that I'm doing inside of the UIView
class is I'm responding to touch events and sending the touch information to the sublayers so that the UI can update its appearance accordingly. I'm not overriding the drawRect
method or anything like that.
The Question
Basically, I'm trying to figure out whether I should either:
Option 1:
Get rid of the CustomView
class, create a CustomViewController
class that is a subclass of UIViewController
, and simply add the CALayer
objects as sublayers of the CustomViewController
's built-in view
property.
or
Option 2:
My thinking about the UIViewController
subclass being redundant is correct, so I should leave it the way I have it and have a CustomView
class with the CALayer
objects inside of it.
I would highly appreciate any advice on this.
I think that in terms of MVC, the code you're describing (option #2) is well written and maintains a very clear boundary of responsibility. You're not writing any code that has nothing to do with the view layer itself in this class which is great. I think that in this case there's no need for a separate UIViewController
subclass to manage these instances because as you said - they are handling their own touch events and visible layers (exactly their responsibility).
If for any reason there is a need for something more complex that requires data related logic or other such computation, I would definitely consider subclassing a UIViewController
or maybe looking at the problem in an entirely different way.
Given the situation you've presented, I think that maintaining the CALayer
instance within this UIView
subclass ('CustomView') is the right way to go.