@@ -12,7 +12,8 @@ final class ChatViewController: UIViewController {
1212 private enum Constant {
1313 static let navigatioBarBackgroundColor = UIColor ( white: 0.96 , alpha: 1 )
1414 static let keyboardGap : CGFloat = 38
15- static let viewBackgroundColor = UIColor ( red: 246 / 255 , green: 245 / 255 , blue: 246 / 255 , alpha: 1 )
15+ static let viewBackgroundColor = UIColor ( r: 246 , g: 245 , b: 246 )
16+ static let cornerRadiusRatio : CGFloat = 0.08
1617 }
1718
1819 @IBOutlet private var tableView : UIChatTableView !
@@ -24,18 +25,15 @@ final class ChatViewController: UIViewController {
2425 }
2526 }
2627
28+ // Initial views for connecting
29+ private lazy var connectView : ConnectView = ConnectView . instantiateFromNib ( )
2730 @IBOutlet private var overlayView : UIView !
28- @IBOutlet weak var connectViewContainerView : UIView ! {
31+ @IBOutlet private var connectViewContainerView : UIView ! {
2932 didSet {
3033 connectView. embed ( into: connectViewContainerView)
3134 }
3235 }
3336
34- private lazy var connectView : ConnectView = {
35- let connectView = UINib ( nibName: " ConnectView " , bundle: . main) . instantiate ( withOwner: nil , options: nil ) . first as! ConnectView
36- return connectView
37- } ( )
38-
3937 private var textBoardView = TextBoardView . instantiateFromNib ( )
4038 private var viewModel : ChatViewModelInterface ?
4139
@@ -135,6 +133,11 @@ final class ChatViewController: UIViewController {
135133 UIView . animate ( withDuration: duration, animations: {
136134 self . textBoardViewContainerBottomConstraint. constant = newBottomConstant
137135 self . view. layoutIfNeeded ( )
136+ let messagesCount = self . messages. count
137+ guard messagesCount > 0 else {
138+ return
139+ }
140+ self . tableView. scrollToRow ( at: IndexPath ( row: messagesCount - 1 , section: 0 ) , at: . bottom, animated: false )
138141 } )
139142 }
140143
@@ -149,13 +152,15 @@ final class ChatViewController: UIViewController {
149152 tableView. delegate = self
150153 tableView. dataSource = self
151154
155+ connectViewContainerView. layer. masksToBounds = true
156+
152157 view. backgroundColor = Constant . viewBackgroundColor
153158 navigationController? . navigationBar. backgroundColor = Constant . navigatioBarBackgroundColor
154159
155160 let searchButtonViewData = ConnectView . ViewData. ButtonViewData (
156161 title: " Search server " ,
157162 color: . white,
158- backgroundColor: . init( red : 32 / 255 , green : 99 / 255 , blue : 155 / 255 , alpha : 1 ) ,
163+ backgroundColor: . init( r : 32 , g : 99 , b : 155 ) ,
159164 tapHanlder: { [ weak self] in
160165 self ? . connectView. showActivityIndicator ( true )
161166 self ? . viewModel? . searchServer ( )
@@ -165,7 +170,7 @@ final class ChatViewController: UIViewController {
165170 let serverButtonViewData = ConnectView . ViewData. ButtonViewData (
166171 title: " Become server " ,
167172 color: . white,
168- backgroundColor: . init( red : 32 / 255 , green : 99 / 255 , blue : 155 / 255 , alpha : 1 ) ,
173+ backgroundColor: . init( r : 32 , g : 99 , b : 155 ) ,
169174 tapHanlder: { [ weak self] in
170175 self ? . viewModel? . askServerPermissions ( )
171176 self ? . hideOverlay ( )
@@ -181,13 +186,23 @@ final class ChatViewController: UIViewController {
181186 }
182187
183188 private func hideOverlay( ) {
184- overlayView. isHidden = true
185- connectViewContainerView. isHidden = true
189+ UIView . animate ( withDuration: 0.35 , animations: {
190+ self . overlayView. alpha = 0
191+ self . connectViewContainerView. alpha = 0
192+ } , completion: { _ in
193+ self . overlayView. isHidden = true
194+ self . connectViewContainerView. isHidden = true
195+ } )
186196 }
187197
188198 @objc private func didTapOnTableview( ) {
189199 view. endEditing ( true )
190200 }
201+
202+ override func viewDidLayoutSubviews( ) {
203+ super. viewDidLayoutSubviews ( )
204+ connectViewContainerView. layer. cornerRadius = connectViewContainerView. frame. height * Constant. cornerRadiusRatio
205+ }
191206}
192207
193208extension ChatViewController : UITableViewDelegate , UITableViewDataSource {
@@ -226,21 +241,20 @@ extension ChatViewController: MessagePresenter {
226241extension ChatViewController : TextBoardViewDelegate {
227242 func textBoard( _ textBoard: TextBoardView , didPressSendButtonWith text: String ) {
228243 viewModel? . send ( text)
229- view. endEditing ( true )
230244 }
231245}
232246
233247extension MessageTableViewCell . ViewData {
234248 static func from( _ chatMessage: ChatMessage ) -> MessageTableViewCell . ViewData {
235- let textColor = chatMessage. isMyMessage ? MessageTableViewCell . Constant . outgoingMessageTextColor : MessageTableViewCell . Constant . incomingMessageTextColor
236- let backgroundColor = chatMessage. isMyMessage ? MessageTableViewCell . Constant . outgoingMessageBubbleColor : MessageTableViewCell . Constant . incomingMessageBubbleColor
249+ let textColor : UIColor = chatMessage. isSentByMe ? . outgoingMessageTextColor : . incomingMessageTextColor
250+ let backgroundColor : UIColor = chatMessage. isSentByMe ? . outgoingMessageBubbleColor : . incomingMessageBubbleColor
237251
238252 return MessageTableViewCell . ViewData (
239253 sender: chatMessage. senderAlias,
240254 text: chatMessage. text,
241255 textColor: textColor,
242256 backgroundColor: backgroundColor,
243- alignment: chatMessage. isMyMessage ? . right : . left
257+ alignment: chatMessage. isSentByMe ? . right : . left
244258 )
245259 }
246260}
0 commit comments