@@ -12,51 +12,21 @@ class CardView: UIView {
1212
1313 var post: WallPost? {
1414 didSet {
15−// print(post?.owner)
15+ print(post?.owner)
1616 update()
1717 }
1818 }
19− var minWidth: CGFloat = 300 {
20− didSet {
21−// update()
22− }
23− }
24− var height: CGFloat = 400 {
25− didSet {
26−// update()
27− }
28− }
2919
3020 override init(frame: CGRect) {
3121 super.init(frame: frame)
3222 layer.masksToBounds = true
3323 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)
24+ backgroundColor = #colorLiteral(red: 0.8039215803, green: 0.8039215803, blue: 0.8039215803, alpha: 1)
3925 }
4026
4127 required init?(coder aDecoder: NSCoder) {
4228 fatalError("init(coder:) has not been implemented")
4329 }
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− }
6030
6131// private let avatar = UIImage()
6232// private let name = UIImage()
@@ -65,13 +35,14 @@ class CardView: UIView {
6535 subviews.map {$0.removeFromSuperview()}
6636
6737 let largeStack = StackView(axis: .vertical, alignment: .left)
68− largeStack.padding = padding
38+ largeStack.padding = CGPoint(x: 32, y: 32)
6939 addSubview(largeStack)
7040
7141 let userView = StackView(axis: .horizontal, alignment: .center)
42+// userView.backgroundColor = #colorLiteral(red: 0.5568627715, green: 0.3529411852, blue: 0.9686274529, alpha: 1)
7243
7344
74− let avatarDim: CGFloat = 64
45+ let avatarDim: CGFloat = 50
7546 let avatar = UIImageView()
7647 post?.owner?.avatar?.load(into: avatar)
7748 avatar.layer.cornerRadius = avatarDim/2
@@ -81,116 +52,30 @@ class CardView: UIView {
8152 avatar.frame.size = CGSize(width: avatarDim, height: avatarDim)
8253 userView.addArrangedSubview(.view(avatar))
8354
84− userView.addArrangedSubview(.spacer(16))
55+ userView.addArrangedSubview(.spacer(8))
8556
8657 let userName = UILabel()
8758 let firstName = post?.owner?.firstName ?? ""
8859 let lastName = post?.owner?.lastName ?? ""
8960 userName.text = "\(firstName) \(lastName)"
9061 userName.font = UIFont.systemFont(ofSize: 28, weight: UIFontWeightHeavy)
91− userName.textColor = UIColor.darkText
9262 userName.sizeToFit()
9363 userView.addArrangedSubview(.view(userName))
94−
95− userView.layoutIfNeeded()
64+ userView.frame.origin = CGPoint(x: 16, y: 16)
9665
9766 largeStack.addArrangedSubview(.view(userView))
9867
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)
68+ largeStack.addArrangedSubview(.spacer(16))
15369
15470 let body = UILabel()
15571 body.numberOfLines = 0
156− let bodyWidth: Double = Double(width)
72+ let bodyWidth: Double = 300
15773 body.font = UIFont.systemFont(ofSize: 22, weight: UIFontWeightSemibold)
158− body.text = post?.body
159− body.textColor = UIColor.darkText
74+ 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."
16075 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− }
76+ body.frame.size = size
17877
17978 largeStack.addArrangedSubview(.view(body))
18079
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−
19580 }
19681}