diff --git a/Yep/Images.xcassets/icon_more_image.imageset/Contents.json b/Yep/Images.xcassets/icon_more_image.imageset/Contents.json new file mode 100644 index 00000000..5d281b98 --- /dev/null +++ b/Yep/Images.xcassets/icon_more_image.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "icon_more_image.pdf" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Yep/Images.xcassets/icon_more_image.imageset/icon_more_image.pdf b/Yep/Images.xcassets/icon_more_image.imageset/icon_more_image.pdf new file mode 100644 index 00000000..6376d178 Binary files /dev/null and b/Yep/Images.xcassets/icon_more_image.imageset/icon_more_image.pdf differ diff --git a/Yep/Info.plist b/Yep/Info.plist index bb251984..e208d771 100644 --- a/Yep/Info.plist +++ b/Yep/Info.plist @@ -32,7 +32,7 @@ CFBundleVersion - 86 + 87 Fabric APIKey diff --git a/Yep/Services/YepServiceSync.swift b/Yep/Services/YepServiceSync.swift index 57399940..215f0525 100644 --- a/Yep/Services/YepServiceSync.swift +++ b/Yep/Services/YepServiceSync.swift @@ -757,8 +757,14 @@ func syncMessageWithMessageInfo(messageInfo: JSONDictionary, inRealm realm: Real newMessage.createdUnixTime = updatedUnixTime } - // TODO: 可能可以根据是否已进入Conversation界面来修改到达时间,减少聊天界面的插入切换 - // 之后消息以到达时间排序 + // 确保网络来的消息比任何已有的消息都要新,防止服务器消息延后发来导致插入到当前消息上面 + if let latestMessage = realm.objects(Message).sorted("createdUnixTime", ascending: true).last { + if newMessage.createdUnixTime < latestMessage.createdUnixTime { + println("before newMessage.createdUnixTime: \(newMessage.createdUnixTime)") + newMessage.createdUnixTime = latestMessage.createdUnixTime + YepConfig.Message.localNewerTimeInterval + println("adjust newMessage.createdUnixTime: \(newMessage.createdUnixTime)") + } + } realm.write { realm.add(newMessage) diff --git a/Yep/ViewControllers/Conversation/ConversationViewController.swift b/Yep/ViewControllers/Conversation/ConversationViewController.swift index faf3f614..1178744f 100644 --- a/Yep/ViewControllers/Conversation/ConversationViewController.swift +++ b/Yep/ViewControllers/Conversation/ConversationViewController.swift @@ -1502,6 +1502,9 @@ class ConversationViewController: BaseViewController { if newMessagesCount != messageIDs.count { reloadConversationCollectionView() println("newMessagesCount != messageIDs.count") + //#if DEBUG + YepAlert.alertSorry(message: "请截屏报告!\nnewMessagesCount: \(newMessagesCount)\nmessageIDs.count: \(messageIDs.count): \(messageIDs)", inViewController: self) + //#endif return } } @@ -2077,9 +2080,6 @@ extension ConversationViewController: UICollectionViewDataSource, UICollectionVi if let messageTextView = self?.messageToolbar.messageTextView { if messageTextView.isFirstResponder() { self?.messageToolbar.state = .Default - delay(YepConfig.dismissKeyboardDelayTimeInterval) { - self?.performSegueWithIdentifier("showMessageMedia", sender: message) - } return } } @@ -2122,9 +2122,6 @@ extension ConversationViewController: UICollectionViewDataSource, UICollectionVi if let messageTextView = self?.messageToolbar.messageTextView { if messageTextView.isFirstResponder() { self?.messageToolbar.state = .Default - delay(YepConfig.dismissKeyboardDelayTimeInterval) { - self?.performSegueWithIdentifier("showMessageMedia", sender: message) - } return } } @@ -2195,9 +2192,6 @@ extension ConversationViewController: UICollectionViewDataSource, UICollectionVi if let messageTextView = self?.messageToolbar.messageTextView { if messageTextView.isFirstResponder() { self?.messageToolbar.state = .Default - delay(YepConfig.dismissKeyboardDelayTimeInterval) { - self?.performSegueWithIdentifier("showMessageMedia", sender: message) - } return } } @@ -2266,9 +2260,6 @@ extension ConversationViewController: UICollectionViewDataSource, UICollectionVi if let messageTextView = self?.messageToolbar.messageTextView { if messageTextView.isFirstResponder() { self?.messageToolbar.state = .Default - delay(YepConfig.dismissKeyboardDelayTimeInterval) { - self?.performSegueWithIdentifier("showMessageMedia", sender: message) - } return } } diff --git a/Yep/ViewControllers/MessageMedia/MessageMediaViewController.swift b/Yep/ViewControllers/MessageMedia/MessageMediaViewController.swift index 308e4b00..9fbc12f2 100644 --- a/Yep/ViewControllers/MessageMedia/MessageMediaViewController.swift +++ b/Yep/ViewControllers/MessageMedia/MessageMediaViewController.swift @@ -33,7 +33,8 @@ class MessageMediaViewController: UIViewController { title = NSLocalizedString("Preview", comment: "") automaticallyAdjustsScrollViewInsets = false - + + mediaControlView.hidden = true if let message = message { @@ -91,6 +92,8 @@ class MessageMediaViewController: UIViewController { case MessageMediaType.Video.rawValue: + mediaView.imageView.hidden = true + mediaControlView.type = .Video mediaControlView.playState = .Playing @@ -170,6 +173,13 @@ class MessageMediaViewController: UIViewController { delay(0.01) { self.hideStatusBar = true } + + mediaControlView.alpha = 0 + mediaControlView.hidden = false + + UIView.animateWithDuration(0.2, delay: 0.0, options: .CurveEaseInOut, animations: { + self.mediaControlView.alpha = 1 + }, completion: { _ in }) } override func viewWillDisappear(animated: Bool) { diff --git a/Yep/Views/Media/MediaControlView.swift b/Yep/Views/Media/MediaControlView.swift index 98445675..a19a42e5 100644 --- a/Yep/Views/Media/MediaControlView.swift +++ b/Yep/Views/Media/MediaControlView.swift @@ -23,6 +23,7 @@ class MediaControlView: UIView { case .Image: timeLabel.hidden = true playButton.hidden = true + shareButton.setImage(UIImage(named: "icon_more_image"), forState: .Normal) case .Video: timeLabel.hidden = false @@ -120,7 +121,7 @@ class MediaControlView: UIView { let constraintsV = NSLayoutConstraint.constraintsWithVisualFormat("V:|[timeLable]|", options: NSLayoutFormatOptions(0), metrics: nil, views: viewsDictionary) - let constraintsH = NSLayoutConstraint.constraintsWithVisualFormat("H:|-20-[timeLable]-(>=0)-[playButton]-(>=0)-[shareButton]|", options: .AlignAllCenterY | .AlignAllTop | .AlignAllBottom, metrics: nil, views: viewsDictionary) + let constraintsH = NSLayoutConstraint.constraintsWithVisualFormat("H:|-30-[timeLable]-(>=0)-[playButton]-(>=0)-[shareButton]|", options: .AlignAllCenterY | .AlignAllTop | .AlignAllBottom, metrics: nil, views: viewsDictionary) NSLayoutConstraint.activateConstraints(constraintsV) NSLayoutConstraint.activateConstraints(constraintsH)