UICreator is available through CocoaPods. To install it, simply add the following line to your Podfile:
pod 'UICreator'| Class | Name | Status | Description |
|---|---|---|---|
| UIViewController | UICHostingView | ✅ | It is used to host UICreator's View. |
| UINavigationController | UICNavigation | ✅ | It can be used the UICNavigation.Other to use custom navigations. |
| UITabController | UICTab | ✅ | Defines a tab bar with UICTabItem to create the tab views. |
| UICPage | UIPageViewController | 🟡 | Create page views. |
| UIView | UICSpacer | ✅ | It contains a lot of properties from UIView and helps spacing content inside of it. |
| UIStackView | UICStack | ✅ | It has two variation UICVStack and UICHStack. |
| UILabel | UICLabel | ✅ | It shows the text on the screen. |
| UITextField | UICText | ✅ | Is a text that can be edited. |
| UITextView | UICScrollText | ✅ | It is a scrollable text that can be edited. |
| UIScrollView | UICScroll | ✅ | Scrollable content with two variation UICVScroll and UICHScroll. |
| UIImageView | UICImage | ✅ | It shows the image on the screen. |
| UIButton | UICButton | ✅ | It is a view with control settings. |
| UICActivity | UIActivityIndicatorView | ✅ | Use the isLoading to show the indicator. |
| UICPageControl | UIPageControl | ✅ | Works by showing indicator to actual page. |
| -- | UICRounder | ✅ | It is used to set cornerRadius and border layout |
| -- | UICZStack | ✅ | It shows more than one child view. |
| -- | UICViewRepresentable | ✅ | It is used to make UIKit view a UICreator view. |
| UITableView | UICList | 🟡 | It list views using UICRow, UICHeader, UICFooter and UICSection. Only some features are implemented. |
| UICollectionView | UICCollection | ❌ | It list view using UICRow, UICHeader, UICFooter and UICSection. It can be used UICFlow that uses UICollectionFlowLayout. To create the layout to views, use layoutMaker(_:). Only some features are implemented. |
| Object | Status | Description |
|---|---|---|
| Value | ✅ | Store value inside view. Using the $ it will turn into a Relay object. |
| Relay | 🟡 | It is used to update view property with sync(_:) or next(_:). There are other special properties like bind(to:), map(_:) and flatMap(_:). It is available some operations with booleans, like self.$isEnabled && self.$isEmpty, resulting in Relay. It needs more methods to be more flexible. |
| Property | 🟡 | Allow the view to change behavior depending on value of UIView. Accessing with $ will return a Relay. It needs to be configurated by calling dynamicProperty(_:) on any view inside the body. |
| Object | Status | Description |
|---|---|---|
| UICOutlet | ✅ | As a way to store the reference of a view inside ViewCreator. Configurated by calling the as(_:) method on the view inside the body getter. |
Most functions with callback return UIView as a parameter.
| Method | Life Time | Description |
|---|---|---|
| onNotRendered(_:) | Only once | The callback is called when the UIView will move to superview. |
| onRendered(_:) | Only once | It is called when the UIView did move to superview. |
| onInTheScene(_:) | Only once | It is called when the UIView did move to window. |
| onLayout(_:) | Forever | When uiview layout subviews. |
| onTrait(_:) | Forever | When traits changes. |
| onAppear(_:) | Forever | When UIView is not hidden or move to hierarchy. |
| onDisappear(_:) | Forever | When UIView is hidden or quit the hierarchy. |
Besides calling the methods from ViewCreator protocol, it is allowed to declarative create gestures using the on{Gesture}Maker(_:).
| UIGestureRecognized | Class | Method |
|---|---|---|
| UITapGestureRecognized | Tap | onTap(_:) |
| -- | Touch | onTouch(_:) |
| UIHoverGestureRecognized | Hover | onHover(_:) |
| UILongPressGestureRecognizer | LongPress | onLongPress(_:) |
| UIPanGestureRecognizer | Pan | onPan(_:) |
| UIPinchGestureRecognizer | Pinch | onPinch(_:) |
| UIRotationGestureRecognizer | Rotation | onRotation(_:) |
| UIScreenEdgePanGestureRecognizer | ScreenEdgePan | onScreenEdgePan(_:) |
| UISwipeGestureRecognizer | Swipe | onSwipe(_:) |
Depending on the view, UIControl works by calling the selector when some event occurs. The Control protocol enable events from view that extends UIControl and provides the onEvent(_:, _:) method. With that, UICText implements the onEditingDidEnd(_:) and other methods from UIControl.
Go check this repository UICreator Examples to learn and test the library.
import UICreator
class LandmarkRow: UICView {
let landmark: Landmark
init(landmark: Landmark) {
self.landmark = landmark
}
var body: ViewCreator {
UICSpacer(vertical: 5) {
UICHStack {
UICImage(image: self.landmark.image)
.aspectRatio()
.height(equalTo: 50)
.contentMode(.fill)
.clipsToBounds(true)
UICLabel(self.landmark.name)
UICSpacer()
}
.spacing(15)
}
}
}
brennobemoura, [email protected]
UICreator is available under the MIT license. See the LICENSE file for more info.