This is a curated list of iOS (Swift & ObjC) frameworks which are inspired by React and Elm.
- ReactSwift by @ColinEberhardt
- https://github.com/ColinEberhardt/ReactSwift
This is a curated list of iOS (Swift & ObjC) frameworks which are inspired by React and Elm.
| // | |
| // Created by https://quickplan.app on 2020/11/8. | |
| // | |
| import SwiftUI | |
| /// Control if allow to dismiss the sheet by the user actions | |
| /// - Drag down on the sheet on iPhone and iPad | |
| /// - Tap outside the sheet on iPad | |
| /// No impact to dismiss programatically (by calling "presentationMode.wrappedValue.dismiss()") |
| import SwiftUI | |
| fileprivate extension DateFormatter { | |
| static var month: DateFormatter { | |
| let formatter = DateFormatter() | |
| formatter.dateFormat = "MMMM" | |
| return formatter | |
| } | |
| static var monthAndYear: DateFormatter { |
| // | |
| // Lightweight but powerful state machine. | |
| // | |
| // Usage: | |
| // enum TrafficLight: State { | |
| // case red, orange, green | |
| // } | |
| // | |
| // var trafficLights = StateMachine<TrafficLight>(initialState: .red) | |
| // trafficLights.addRoute(from: .red, to: .green) |
| extension UIImage { | |
| private final class UIImageActivityItemSource: NSObject, UIActivityItemSource { | |
| var image = UIImage() | |
| var title: String? | |
| var url: URL? | |
| func activityViewControllerPlaceholderItem(_ activityViewController: UIActivityViewController) -> Any { | |
| UIImage() | |
| } |
| extension View { | |
| func relative(width: CGFloat? = nil, height: CGFloat? = nil, alignment: Alignment = .center) -> some View { | |
| Color.clear | |
| .frame(maxWidth: width.map { _ in .infinity }, maxHeight: height.map { _ in .infinity }) | |
| .overlay(GeometryReader { proxy in | |
| ZStack { | |
| self.frame( | |
| width: width.map { proxy.size.width * $0 }, | |
| height: height.map { proxy.size.height * $0 } | |
| ) |
| func scrollViewDidScroll(_ scrollView: UIScrollView) { | |
| for (i, view) in scrollView.subviews.enumerated() { | |
| var ty = 0.0 | |
| if scrollView.contentOffset.y < 0 { | |
| // We're scrolling past the top of the scroll view. | |
| // Translate each item in the scroll view by some amount based on its index and scroll offset. | |
| ty = CGFloat(i) * abs(offsetY) / 8.0 * pow(1.12, CGFloat(i)) | |
| } | |
| view.transform = CGAffineTransform(translationX: 0, y: ty) | |
| } |