-
Notifications
You must be signed in to change notification settings - Fork 40
/
Copy pathUIImageView.swift
64 lines (57 loc) · 1.7 KB
/
UIImageView.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
//
// UIImageView.swift
// UIKit
//
// Created by Geordie Jay on 16.05.17.
// Copyright © 2017 flowkey. All rights reserved.
//
open class UIImageView: UIView {
public init(image: UIImage? = nil) {
self.image = image
super.init(frame: .zero)
updateTextureFromImage()
}
override public init(frame: CGRect) {
super.init(frame: frame)
isUserInteractionEnabled = false
}
private func updateTextureFromImage() {
layer.contents = image?.cgImage
layer.contentsScale = image?.scale ?? UIScreen.main.scale
if let image = image {
bounds.size = image.size
}
}
public var image: UIImage? {
didSet {
if image === oldValue { return }
updateTextureFromImage()
setNeedsLayout()
}
}
override open func sizeThatFits(_ size: CGSize) -> CGSize {
return image?.size ?? .zero
}
open var contentMode: UIContentMode = .scaleToFill {
didSet {
switch contentMode {
case .scaleToFill:
layer.contentsGravity = .resize
case .scaleAspectFill:
layer.contentsGravity = .resizeAspectFill
case .scaleAspectFit:
layer.contentsGravity = .resizeAspect
case .center:
layer.contentsGravity = .center
default:
assertionFailure("The contentMode you tried to set (\(contentMode)) hasn't been implemented yet!")
}
}
}
}
public enum UIContentMode {
case left, right, top, bottom // Not implemented!
case center
case scaleToFill // resize / stretch
case scaleAspectFit, scaleAspectFill
}