[docs] UIKit.md: Media & Components section (UIKit.md complete)
This commit is contained in:
@@ -700,4 +700,116 @@ collectionView.collectionViewLayout = layout
|
|||||||
|
|
||||||
## Media & Components
|
## Media & Components
|
||||||
|
|
||||||
<!-- batch 13 -->
|
<details>
|
||||||
|
<summary><b>LCSnackBarView</b> — in-app notification banner</summary>
|
||||||
|
|
||||||
|
A chainable banner shown from the top or bottom of a controller. Configure with
|
||||||
|
`configure(...)` calls, then `present()`.
|
||||||
|
|
||||||
|
### `init(style: LCSnackBarViewType = .default, orientation: LCSnackBarOrientation = .top, delegate: LCSnackBarViewDelegate? = nil)`
|
||||||
|
|
||||||
|
### Enums
|
||||||
|
- `LCSnackBarViewType` — `.default` (rectangular) / `.rounded`
|
||||||
|
- `LCSnackBarOrientation` — `.top` / `.bottom`
|
||||||
|
- `LCSnackBarTimer: CGFloat` — `.infinity` (0, manual dismiss), `.minimum` (2s), `.medium` (5s), `.maximum` (10s)
|
||||||
|
|
||||||
|
### Configuration (each returns `Self`)
|
||||||
|
| Method | Sets |
|
||||||
|
|---|---|
|
||||||
|
| `configure(text: String)` | the message |
|
||||||
|
| `configure(textColor: UIColor)` | text colour |
|
||||||
|
| `configure(textFont: UIFont, alignment: NSTextAlignment = .center)` | font + alignment |
|
||||||
|
| `configure(backgroundColor: UIColor)` | banner background |
|
||||||
|
| `configure(exibition timer: LCSnackBarTimer)` | how long it stays |
|
||||||
|
| `configure(imageIconBefore icon: UIImageView, withTintColor: UIColor? = nil)` | leading icon |
|
||||||
|
|
||||||
|
### `func present(completion: (() -> Void)? = nil)`
|
||||||
|
Show on the top-most view controller.
|
||||||
|
|
||||||
|
### `weak var delegate: LCSnackBarViewDelegate?`
|
||||||
|
`snackbar(didStartExibition:)`, `snackbar(didTouchOn:)`, `snackbar(didEndExibition:)` — all optional.
|
||||||
|
|
||||||
|
### Full example
|
||||||
|
|
||||||
|
```swift
|
||||||
|
LCSnackBarView(style: .rounded, orientation: .bottom)
|
||||||
|
.configure(text: "Profile saved")
|
||||||
|
.configure(backgroundColor: .systemGreen)
|
||||||
|
.configure(exibition: .minimum)
|
||||||
|
.present()
|
||||||
|
```
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary><b>ImagePickerController</b> — camera / photo-library picker with permissions</summary>
|
||||||
|
|
||||||
|
Wraps `UIImagePickerController`, handling camera & photo-library authorization
|
||||||
|
(including the "go to Settings" path) and presenting a source-choice alert.
|
||||||
|
|
||||||
|
### `init()`
|
||||||
|
### `weak var delegate: ImagePickerControllerDelegate?`
|
||||||
|
### `var isEditable: Bool` — allow in-picker cropping (default `false`)
|
||||||
|
### `func openImagePicker()`
|
||||||
|
Check permissions, then present the camera/library choice.
|
||||||
|
|
||||||
|
### `protocol ImagePickerControllerDelegate: AnyObject`
|
||||||
|
`imagePicker(didSelect image: UIImage?)` — the picked (or edited) image, or `nil` on cancel/failure.
|
||||||
|
|
||||||
|
```swift
|
||||||
|
let picker = ImagePickerController()
|
||||||
|
picker.delegate = self
|
||||||
|
picker.isEditable = true
|
||||||
|
present(picker, animated: false) { picker.openImagePicker() }
|
||||||
|
|
||||||
|
// ImagePickerControllerDelegate
|
||||||
|
func imagePicker(didSelect image: UIImage?) {
|
||||||
|
avatarView.image = image
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary><b>ImageZoomController</b> — full-screen pinch-zoom / pan viewer</summary>
|
||||||
|
|
||||||
|
### `init(_ withImage: UIImage)`
|
||||||
|
### `var minimumZoomScale: CGFloat` (default `1.0`) / `var maximumZoomScale: CGFloat` (default `6.0`)
|
||||||
|
### `var addGestureToDismiss: Bool` (default `true`) — drag down to close
|
||||||
|
### `weak var delegate: ImageZoomControllerDelegate?`
|
||||||
|
### `func present(completion: (() -> Void)? = nil)` / `func dismiss(completion: (() -> Void)? = nil)`
|
||||||
|
Present from / dismiss to the top-most controller.
|
||||||
|
|
||||||
|
### `@objc protocol ImageZoomControllerDelegate`
|
||||||
|
`imageZoomController(controller:didZoom:)`, `imageZoomController(controller:didClose:)` — both optional.
|
||||||
|
|
||||||
|
```swift
|
||||||
|
let viewer = ImageZoomController(photo)
|
||||||
|
viewer.maximumZoomScale = 4
|
||||||
|
viewer.present()
|
||||||
|
```
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary><b>GifHelper</b> — animated GIF loading</summary>
|
||||||
|
|
||||||
|
### `UIImageView.loadGif(name: String)` / `UIImageView.loadGif(asset: String)` *(iOS 9+)*
|
||||||
|
Decode a bundled `.gif` (or an asset-catalog data set) off the main thread and
|
||||||
|
assign the resulting animated `UIImage`.
|
||||||
|
|
||||||
|
```swift
|
||||||
|
bannerView.loadGif(name: "loading") // loading.gif in the bundle
|
||||||
|
bannerView.loadGif(asset: "confetti") // NSDataAsset "confetti"
|
||||||
|
```
|
||||||
|
|
||||||
|
### `UIImage.gif(data: Data) -> UIImage?` / `gif(url: String) -> UIImage?` / `gif(name: String) -> UIImage?` / `gif(asset: String) -> UIImage?`
|
||||||
|
Build an animated `UIImage` from GIF bytes / a URL string / a bundled file / an
|
||||||
|
asset-catalog entry. Frame delays are honoured (via the GCD of per-frame delays).
|
||||||
|
|
||||||
|
```swift
|
||||||
|
let spinner = UIImage.gif(name: "spinner")
|
||||||
|
imageView.image = spinner
|
||||||
|
```
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|||||||
Reference in New Issue
Block a user