-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPostimageTableViewCell.swift
151 lines (109 loc) · 5.24 KB
/
PostimageTableViewCell.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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
//
// PostimageTableViewCell.swift
// GOT
//
// Created by Kenneth Okereke on 3/31/17.
// Copyright © 2017 Mexonis. All rights reserved.
//
import UIKit
import SDWebImage
import AVFoundation
class PostimageTableViewCell: UITableViewCell {
@IBOutlet weak var dateLabel: UILabel!
@IBOutlet weak var usernameLabel: UILabel!
@IBOutlet weak var userImageView: UIImageView!
@IBOutlet weak var postTextLabel: UILabel!
@IBOutlet weak var postImageView: UIImageView!
@IBOutlet weak var verifiedImageView: UIImageView!
var netService = NetworkingServices()
var playButton: UIButton! = nil
var player: AVPlayer!
var playLayer: AVPlayerLayer!
var posts: Post! = nil
let actIndicatorView: UIActivityIndicatorView = {
let aiv = UIActivityIndicatorView(activityIndicatorStyle: .whiteLarge)
aiv.hidesWhenStopped = true
aiv.startAnimating()
return aiv
}()
override func prepareForReuse() {
super.prepareForReuse()
self.usernameLabel.text = ""
self.postTextLabel.text = ""
playLayer?.removeFromSuperlayer()
player?.pause()
playButton?.removeFromSuperview()
actIndicatorView.stopAnimating()
}
func configureCell(post: Post) {
posts = post
self.postImageView.sd_setImage(with: URL(string: post.postImageURL), placeholderImage: UIImage(named: "Default-thumbnail"), options: SDWebImageOptions.cacheMemoryOnly) { (image, error, type, url) in
self.addVideo()
}
netService.fetchPostUserInfo(forUserID: post.userId) { (user) in
if let user = user {
self.userImageView.sd_setImage(with: URL(string: user.profilePictureUrl), placeholderImage: UIImage(named: "Default"))
self.usernameLabel.text = user.getemail()
self.verifiedImageView.isHidden = !user.isVerified
}
}
self.postTextLabel.text = post.postText
let fromDate = NSDate(timeIntervalSince1970: TimeInterval(post.postDate))
let toDate = NSDate()
let differenceOfDate = Calendar.current.dateComponents([.second,.minute,.hour,.day,.weekOfMonth], from: fromDate as Date, to: toDate as Date)
if differenceOfDate.second! <= 0 {
dateLabel.text = "now"
} else if differenceOfDate.second! > 0 && differenceOfDate.minute! == 0 {
dateLabel.text = "\(differenceOfDate.second!)secs."
}else if differenceOfDate.minute! > 0 && differenceOfDate.hour! == 0 {
dateLabel.text = "\(differenceOfDate.minute!)mins."
}else if differenceOfDate.hour! > 0 && differenceOfDate.day! == 0 {
dateLabel.text = "\(differenceOfDate.hour!)hrs."
}else if differenceOfDate.day! > 0 && differenceOfDate.weekOfMonth! == 0 {
dateLabel.text = "\(differenceOfDate.day!)dys."
}else if differenceOfDate.weekOfMonth! > 0 {
dateLabel.text = "\(differenceOfDate.weekOfMonth!)wks."
}
}
func addVideo() {
guard let post = posts else { return }
if post.postVideoURL != "" {
self.playButton = UIButton(type: .custom)
let image = UIImage(named: "bt_play")
let rect = self.postImageView.frame
self.playButton.frame = CGRect(x: rect.origin.x + (rect.width-(image?.size.width)!)/2,
y: rect.origin.y + (rect.height-(image?.size.height)!)/2,
width: (image?.size.width)!,
height: (image?.size.height)!)
self.playButton.setImage(image, for: .normal)
self.playButton.addTarget(self, action: #selector(actionPlay),
for: .touchUpInside)
self.addSubview(self.playButton)
self.actIndicatorView.frame = self.playButton.frame
self.addSubview(self.actIndicatorView)
self.actIndicatorView.isHidden = true
}
}
func actionPlay() {
guard let post = posts else { return }
if post.postVideoURL != "" {
if let url = URL(string: post.postVideoURL) {
player = AVPlayer(url: url)
NotificationCenter.default.addObserver(self, selector: #selector(playerDidFinishPlaying), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: player.currentItem)
playLayer = AVPlayerLayer(player: player)
playLayer.frame = self.postImageView.frame
self.layer.addSublayer(playLayer)
player?.play()
actIndicatorView.isHidden = false
actIndicatorView.startAnimating()
playButton.isHidden = true
}
}
}
func playerDidFinishPlaying() {
playLayer?.removeFromSuperlayer()
player?.pause()
playButton.isHidden = false
actIndicatorView.stopAnimating()
}
}