@@ -12,51 +12,20 @@ class CardView: UIView {
1212
1313 var post: WallPost? {
1414 didSet {
15−// print(post?.owner)
1615 update()
1716 }
1817 }
19− var minWidth: CGFloat = 300 {
20− didSet {
21−// update()
22− }
23− }
24− var height: CGFloat = 400 {
25− didSet {
26−// update()
27− }
28− }
2918
3019 override init(frame: CGRect) {
3120 super.init(frame: frame)
3221 layer.masksToBounds = true
3322 layer.cornerRadius = 20
34− gradient.colors = [#colorLiteral(red: 0.9841352105, green: 0.9841352105, blue: 0.9841352105, alpha: 1).cgColor, #colorLiteral(red: 0.9456828237, green: 0.9456828237, blue: 0.9456828237, alpha: 1).cgColor]
35− gradient.startPoint = CGPoint(x: 0.5, y: 0)
36− gradient.endPoint = CGPoint(x: 0.5, y: 1)
37− layer.addSublayer(gradient)
38−// backgroundColor = #colorLiteral(red: 0.9638966278, green: 0.9734401588, blue: 0.9734401588, alpha: 1)
23+ backgroundColor = #colorLiteral(red: 0.8039215803, green: 0.8039215803, blue: 0.8039215803, alpha: 1)
3924 }
4025
4126 required init?(coder aDecoder: NSCoder) {
4227 fatalError("init(coder:) has not been implemented")
4328 }
44−
45− private let gradient = CAGradientLayer()
46−
47−
48− private let padding = CGPoint(x: 32, y: 32)
49− private let vPadding1: CGFloat = 16
50− private let vPadding2: CGFloat = 16
51− private var minTextHeight: CGFloat {
52− return CGFloat(height * 0.2)
53− }
54− private let gradientRatio: CGFloat = 0.2
55− private let minGradientAmount: CGFloat = 70
56− private let hiddenByGradient: CGFloat = 10
57− private var maxAttachmentDim: CGFloat {
58− return minWidth / 2.3
59− }
6029
6130// private let avatar = UIImage()
6231// private let name = UIImage()
@@ -65,13 +34,14 @@ class CardView: UIView {
6534 subviews.map {$0.removeFromSuperview()}
6635
6736 let largeStack = StackView(axis: .vertical, alignment: .left)
68− largeStack.padding = padding
37+ largeStack.padding = CGPoint(x: 32, y: 32)
6938 addSubview(largeStack)
7039
7140 let userView = StackView(axis: .horizontal, alignment: .center)
41+// userView.backgroundColor = #colorLiteral(red: 0.5568627715, green: 0.3529411852, blue: 0.9686274529, alpha: 1)
7242
7343
74− let avatarDim: CGFloat = 64
44+ let avatarDim: CGFloat = 50
7545 let avatar = UIImageView()
7646 post?.owner?.avatar?.load(into: avatar)
7747 avatar.layer.cornerRadius = avatarDim/2
@@ -81,116 +51,30 @@ class CardView: UIView {
8151 avatar.frame.size = CGSize(width: avatarDim, height: avatarDim)
8252 userView.addArrangedSubview(.view(avatar))
8353
84− userView.addArrangedSubview(.spacer(16))
54+ userView.addArrangedSubview(.spacer(8))
8555
8656 let userName = UILabel()
8757 let firstName = post?.owner?.firstName ?? ""
8858 let lastName = post?.owner?.lastName ?? ""
8959 userName.text = "\(firstName) \(lastName)"
9060 userName.font = UIFont.systemFont(ofSize: 28, weight: UIFontWeightHeavy)
91− userName.textColor = UIColor.darkText
9261 userName.sizeToFit()
9362 userView.addArrangedSubview(.view(userName))
94−
95− userView.layoutIfNeeded()
63+ userView.frame.origin = CGPoint(x: 16, y: 16)
9664
9765 largeStack.addArrangedSubview(.view(userView))
9866
99− largeStack.addArrangedSubview(.spacer(vPadding1))
100−
101−
102− let width = max(minWidth - 2 * padding.x, userView.frame.width)
103−
104−
105− let photoView = CollectionView()
106− photoView.alignment = .top
107− photoView.horizontalPadding = 8
108− photoView.verticalPadding = 8
109− photoView.padding = CGPoint.zero
110− photoView.maxWidth = width
111− var maxPhotoDim: CGFloat = maxAttachmentDim
112− if let attachments = post?.attachments {
113− for attachment in attachments {
114− if let v = attachment.value {
115− switch v {
116− case .photo(let photo):
117− if var pWidth = photo.width.value >>> {CGFloat($0)},
118− var pHeight = photo.height.value >>> {CGFloat($0)} {
119− let photoV = UIImageView()
120− photoV.layer.minificationFilter = kCAFilterTrilinear
121− photoV.contentMode = .scaleAspectFill
122− photo.image?.load(into: photoV)
123− var k: CGFloat!
124− if pWidth > pHeight {
125− k = CGFloat(pWidth) / maxPhotoDim
126− } else {
127− k = CGFloat(pHeight) / maxPhotoDim
128− }
129− pWidth /= k
130− pHeight /= k
131− photoV.frame.size = CGSize(width: pWidth, height: pHeight)
132− photoView.addArrangedSubview(photoV)
133− }
134−
135− default:
136− break // TODO: Handle other data types
137− }
138− }
139− }
140− }
141− photoView.layoutIfNeeded()
142−
143− var textHeight = height
144− textHeight -= padding.y * 2 + vPadding1 + userView.frame.height
145− if let count = post?.attachments.count{
146− if count > 0 {
147− textHeight -= vPadding2 + photoView.frame.height
148− }
149− }
150− print(textHeight)
151− textHeight = max(textHeight, minTextHeight)
152− print(textHeight)
67+ largeStack.addArrangedSubview(.spacer(16))
15368
15469 let body = UILabel()
15570 body.numberOfLines = 0
156− let bodyWidth: Double = Double(width)
71+ let bodyWidth: Double = 300
15772 body.font = UIFont.systemFont(ofSize: 22, weight: UIFontWeightSemibold)
158− body.text = post?.body
159− body.textColor = UIColor.darkText
73+ body.text = post?.body ?? "Spicy jalapeno flank landjaeger sausage tongue tail fatback frankfurter. Meatball tongue tail short ribs pastrami. Short ribs chicken pig tenderloin sausage pork. Corned beef t-bone pancetta jerky chuck picanha venison, turducken tenderloin shoulder boudin drumstick hamburger. Pork meatball meatloaf prosciutto pig andouille. Sirloin bacon hamburger short ribs pork cupim shank biltong turducken bresaola kevin prosciutto shoulder meatball. Strip steak frankfurter pork chop biltong jowl beef rump venison pancetta turkey tongue."
16074 let size = body.textRect(forBounds: CGRect(x: 0, y: 0, width: bodyWidth, height: Double.infinity), limitedToNumberOfLines: 0).size
161− body.frame.size.width = size.width
162− if size.height > textHeight {
163− body.frame.size.height = textHeight
164− let maskView = UIView()
165− let maskLayer = CAGradientLayer()
166− maskLayer.colors = [UIColor.black.cgColor, UIColor.clear.cgColor]
167− maskLayer.endPoint = CGPoint(x: 0.5, y: 1 - (hiddenByGradient/textHeight))
168− let minPoint = minGradientAmount / textHeight
169− maskLayer.startPoint = CGPoint(x: 0.5, y: 1 - max(minPoint, gradientRatio))
170− print(maskLayer.startPoint)
171− maskLayer.frame = body.bounds
172− maskView.frame = body.bounds
173− maskView.layer.addSublayer(maskLayer)
174− body.mask = maskView
175− } else {
176− body.frame.size.height = size.height
177− }
75+ body.frame.size = size
17876
17977 largeStack.addArrangedSubview(.view(body))
18078
181− if let count = post?.attachments.count{
182− if count > 0 {
183− largeStack.addArrangedSubview(.spacer(vPadding2))
184− largeStack.addArrangedSubview(.view(photoView))
185− }
186− }
187−
188− largeStack.layoutIfNeeded()
189−
190− frame.size = CGSize(width: width + padding.x * 2, height: min(height, largeStack.frame.height))
191−
192− gradient.frame = self.bounds
193− gradient.endPoint = CGPoint(x: 0.5, y: bounds.height / height)
194−
19579 }
19680}