嗨,我现在正在制作带有某些基本按钮的相机应用,例如打开闪光灯,启用网格等。>
cameraViewController管理视图。它具有用于预览要捕获的内容的UIView,底部具有用于按钮和快门按钮的UIView。
现在,这就是我的处理方式。CameraEditorUIView内的ShutterButtonUIView和CameraViewController内的CameraEditorUIView。
而且我的编辑器按钮(闪光灯,网格,过滤器等)属于他们自己的类。然后将其插入到我的视图中。这样,我促进了关注分离,并且我的课堂不会被所有的按钮所困扰。
let editorButtons = ActionButtonFactory.shared.editorButtons for button in editorButtons { // Insert to CameraEditorUIView }
以及我的编辑器按钮类之一的示例
class FilterAction: UIButton { private let filter = ["paintbrush.fill"] override init(frame: CGRect) { super.init(frame: frame) self.setImage(getIcon(), for: .normal) self.addTarget(self, action: #selector(filterTapped), for: .touchUpInside) } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } @objc private func filterTapped() { TapticHelper.shared.lightTaptic() NotificationCenter.default.post(name: .presentFilterListVC, object: nil) //Not sure if this is a good approach } private func getIcon() -> UIImage { return IconHelper.shared.getIconImage(iconName: filter[0]) } }
这使我的代码行非常整齐,很小,很好。但这是一个好方法吗?我无法执行任何视图控制器功能,例如呈现任何警报,实例化另一个VC,以及从UIView中进行这种操作。
所以说在按下快门按钮后,我想转到imageDetailVC,我的方法是使用NotificationCenter观察者模式。
我不确定这是否是一种好方法。还是应该将所有内容都放在CameraViewController下?
此外,我对此方法有疑问的另一个原因是,例如,当我需要禁用第三个网格的规则时,我需要将其设置为静态,以便其他UIView可以访问它。
即:另一个类的按钮
[嗨,我现在正在制作带有某些基本按钮的相机应用,例如打开闪光灯,启用网格等。cameraViewController管理视图。并且它具有UIView来预览要显示的内容...
我不确定这是否是最好的方法,但是我发现不是使用UIView,而是使用UIViewController。并将它们添加为子VC。这样,我仍然可以访问父级,而不必与通知耦合在一起,并且使其更难。