Skip to content

Commit e791340

Browse files
committed
cahnge videoCell
1 parent 231ccc0 commit e791340

File tree

11 files changed

+301
-30
lines changed

11 files changed

+301
-30
lines changed

ios/RCTAuroraIMUI.xcodeproj/project.pbxproj

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,8 @@
102102
4E5274D21F3C5CE2005FB9B9 /* IMUIRedPacketMessageCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E5274D11F3C5CE2005FB9B9 /* IMUIRedPacketMessageCell.swift */; };
103103
4E6573561F66940200D4BAA8 /* DWShowImageVC.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E6573541F66940200D4BAA8 /* DWShowImageVC.h */; };
104104
4E6573571F66940200D4BAA8 /* DWShowImageVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E6573551F66940200D4BAA8 /* DWShowImageVC.m */; };
105+
4E6804BF20B512000024DAFC /* DWPlayVideoVC.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E6804BD20B512000024DAFC /* DWPlayVideoVC.h */; };
106+
4E6804C020B512000024DAFC /* DWPlayVideoVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E6804BE20B512000024DAFC /* DWPlayVideoVC.m */; };
105107
4E77A3A51F30840000098CAF /* IMUIAudioPlayerHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E77A3681F30840000098CAF /* IMUIAudioPlayerHelper.swift */; };
106108
4E77A3A61F30840000098CAF /* CGRectExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E77A36A1F30840000098CAF /* CGRectExtension.swift */; };
107109
4E77A3A71F30840000098CAF /* CIImageExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E77A36B1F30840000098CAF /* CIImageExtension.swift */; };
@@ -286,6 +288,8 @@
286288
4E5274D11F3C5CE2005FB9B9 /* IMUIRedPacketMessageCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IMUIRedPacketMessageCell.swift; sourceTree = "<group>"; };
287289
4E6573541F66940200D4BAA8 /* DWShowImageVC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWShowImageVC.h; sourceTree = "<group>"; };
288290
4E6573551F66940200D4BAA8 /* DWShowImageVC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWShowImageVC.m; sourceTree = "<group>"; };
291+
4E6804BD20B512000024DAFC /* DWPlayVideoVC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWPlayVideoVC.h; sourceTree = "<group>"; };
292+
4E6804BE20B512000024DAFC /* DWPlayVideoVC.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWPlayVideoVC.m; sourceTree = "<group>"; };
289293
4E77A3681F30840000098CAF /* IMUIAudioPlayerHelper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IMUIAudioPlayerHelper.swift; sourceTree = "<group>"; };
290294
4E77A36A1F30840000098CAF /* CGRectExtension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CGRectExtension.swift; sourceTree = "<group>"; };
291295
4E77A36B1F30840000098CAF /* CIImageExtension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CIImageExtension.swift; sourceTree = "<group>"; };
@@ -710,6 +714,8 @@
710714
623EA97F1EE55CB200EC43AE /* RCTMessageListView.m */,
711715
4E6573541F66940200D4BAA8 /* DWShowImageVC.h */,
712716
4E6573551F66940200D4BAA8 /* DWShowImageVC.m */,
717+
4E6804BD20B512000024DAFC /* DWPlayVideoVC.h */,
718+
4E6804BE20B512000024DAFC /* DWPlayVideoVC.m */,
713719
623EA9801EE55CB200EC43AE /* RCTMessageListView.xib */,
714720
623EA9811EE55CB200EC43AE /* RCTMessageListViewManager.m */,
715721
623EA99B1EE55D0800EC43AE /* RCTAuroraIMUI.h */,
@@ -779,6 +785,7 @@
779785
4E49ADD61F341BB400B50439 /* MyCacheImageView.h in Headers */,
780786
4E49AE1E1F34762200B50439 /* NIMInputEmoticonButton.h in Headers */,
781787
4E36B2C81F62964E009ECBAE /* DWOrigImageView.h in Headers */,
788+
4E6804BF20B512000024DAFC /* DWPlayVideoVC.h in Headers */,
782789
4E49AD9D1F34178000B50439 /* UIView+Extend.h in Headers */,
783790
4E49AD991F34178000B50439 /* HPGrowingTextView.h in Headers */,
784791
623EA9A91EE55D0800EC43AE /* RCTAuroraIMUI.h in Headers */,
@@ -1018,6 +1025,7 @@
10181025
4E6573571F66940200D4BAA8 /* DWShowImageVC.m in Sources */,
10191026
4E49AD961F34178000B50439 /* DWInputBarControl.m in Sources */,
10201027
4E49AE271F34767100B50439 /* UIImage+NIM.m in Sources */,
1028+
4E6804C020B512000024DAFC /* DWPlayVideoVC.m in Sources */,
10211029
4E5274CE1F3C0925005FB9B9 /* IMUILocationMessageCell.swift in Sources */,
10221030
4E77A3AF1F30840000098CAF /* IMUIChatDataManager.swift in Sources */,
10231031
624B829B1EE5710E006C3C03 /* RCTMessageListView.m in Sources */,

ios/RCTAuroraIMUI.xcodeproj/xcuserdata/dowin.xcuserdatad/xcschemes/xcschememanagement.plist

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@
77
<key>AuroraIMUI.xcscheme</key>
88
<dict>
99
<key>orderHint</key>
10-
<integer>6</integer>
10+
<integer>1</integer>
1111
</dict>
1212
<key>RCTAuroraIMUI.xcscheme</key>
1313
<dict>
1414
<key>orderHint</key>
15-
<integer>7</integer>
15+
<integer>4</integer>
1616
</dict>
1717
</dict>
1818
<key>SuppressBuildableAutocreation</key>

ios/RCTAuroraIMUI/DWPlayVideoVC.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
//
2+
// DWPlayVideoVC.h
3+
// RCTAuroraIMUI
4+
//
5+
// Created by Dowin on 2018/5/23.
6+
// Copyright © 2018年 HXHG. All rights reserved.
7+
//
8+
9+
#import <UIKit/UIKit.h>
10+
11+
@interface DWPlayVideoVC : UIViewController
12+
@property (copy, nonatomic) NSString *strPath;
13+
14+
@end

ios/RCTAuroraIMUI/DWPlayVideoVC.m

Lines changed: 194 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,194 @@
1+
//
2+
// DWPlayVideoVC.m
3+
// RCTAuroraIMUI
4+
//
5+
// Created by Dowin on 2018/5/23.
6+
// Copyright © 2018年 HXHG. All rights reserved.
7+
//
8+
9+
#import "DWPlayVideoVC.h"
10+
#import <MediaPlayer/MediaPlayer.h>
11+
12+
#define screenW [UIScreen mainScreen].bounds.size.width
13+
#define screenH [UIScreen mainScreen].bounds.size.height
14+
15+
@interface DWPlayVideoVC ()
16+
@property (nonatomic, strong) MPMoviePlayerController *moviePlayer;
17+
@property (strong, nonatomic) UIButton *playBtn;
18+
@property (strong, nonatomic) UIButton *backBtn;
19+
@end
20+
21+
@implementation DWPlayVideoVC
22+
23+
- (void)dealloc{
24+
// NSLog(@"dealloc---------------");
25+
[_moviePlayer stop];
26+
[[NSNotificationCenter defaultCenter] removeObserver:self];
27+
}
28+
29+
- (void)viewWillAppear:(BOOL)animated{
30+
[super viewWillAppear:animated];
31+
[self topStatusUIHidden:YES];
32+
}
33+
34+
- (void)viewWillDisappear:(BOOL)animated{
35+
[super viewWillDisappear:animated];
36+
[self topStatusUIHidden:NO];
37+
}
38+
39+
- (void)viewDidAppear:(BOOL)animated{
40+
[super viewDidAppear:animated];
41+
[self setupBtn];
42+
}
43+
44+
- (void)viewDidLoad {
45+
[super viewDidLoad];
46+
self.view.backgroundColor = [UIColor blackColor];
47+
48+
self.playBtn = [[UIButton alloc]initWithFrame:CGRectMake(0, 0, 80, 80)];
49+
self.playBtn.center = CGPointMake(screenW *0.5, screenH * 0.5);
50+
51+
NSString *strImgPath = [[NSBundle bundleForClass:[self class]] pathForResource:@"IMUIAssets.bundle/image/video_play_btn" ofType:@"png"];
52+
[self.playBtn setImage:[UIImage imageWithContentsOfFile:strImgPath] forState:UIControlStateNormal]; ;
53+
[self.playBtn addTarget:self action:@selector(clickPlayBtn) forControlEvents:UIControlEventTouchUpInside];
54+
self.playBtn.hidden = YES;
55+
[self.view addSubview:self.playBtn];
56+
57+
self.backBtn = [[UIButton alloc]initWithFrame:CGRectMake(0, 0, 50, 40)];
58+
[self.backBtn setTitle:@"退出" forState:UIControlStateNormal];
59+
self.backBtn.titleLabel.font = [UIFont systemFontOfSize:20];
60+
[self.backBtn addTarget:self action:@selector(clickTapBackBtn) forControlEvents:UIControlEventTouchUpInside];
61+
62+
if (self.strPath) {
63+
[self startPlay];
64+
}
65+
}
66+
67+
- (void)clickPlayBtn{
68+
self.playBtn.hidden = YES;
69+
[self.moviePlayer play];
70+
}
71+
72+
- (void)clickTapBackBtn{
73+
[_moviePlayer stop];
74+
[self dismissViewControllerAnimated:YES completion:nil];
75+
}
76+
77+
- (MPMoviePlayerController*)moviePlayer{
78+
if (!_moviePlayer){
79+
_moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL fileURLWithPath:self.strPath]];
80+
_moviePlayer.controlStyle = MPMovieControlStyleEmbedded;
81+
_moviePlayer.scalingMode = MPMovieScalingModeAspectFill;
82+
_moviePlayer.fullscreen = YES;
83+
}
84+
return _moviePlayer;
85+
}
86+
87+
88+
- (void)startPlay{
89+
self.moviePlayer.view.frame = self.view.bounds;
90+
self.moviePlayer.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
91+
[self.moviePlayer play];
92+
[self.view addSubview:self.moviePlayer.view];
93+
94+
[[NSNotificationCenter defaultCenter] addObserver:self
95+
selector:@selector(moviePlaybackComplete:)
96+
name:MPMoviePlayerPlaybackDidFinishNotification
97+
object:self.moviePlayer];
98+
[[NSNotificationCenter defaultCenter] addObserver:self
99+
selector:@selector(moviePlayerLoadStateDidChange:)
100+
name:MPMoviePlayerLoadStateDidChangeNotification
101+
object:self.moviePlayer];
102+
103+
104+
[[NSNotificationCenter defaultCenter] addObserver:self
105+
selector:@selector(moviePlayStateChanged:)
106+
name:MPMoviePlayerPlaybackStateDidChangeNotification
107+
object:self.moviePlayer];
108+
109+
[self.view bringSubviewToFront:self.playBtn];
110+
}
111+
112+
113+
- (void)setupBtn{
114+
for (UIView *tmpView in [[self.moviePlayer.view.subviews firstObject].subviews firstObject].subviews) {
115+
if ([tmpView isKindOfClass:NSClassFromString(@"MPVideoPlaybackOverlayView")]) {
116+
tmpView.hidden = NO;
117+
tmpView.alpha = 1.0;
118+
for (UIView *tt in [tmpView.subviews lastObject].subviews) {
119+
for (UIButton *tmpBtn in tt.subviews) {
120+
tmpBtn.hidden = NO;
121+
tmpBtn.alpha = 1.0;
122+
if ([tmpBtn isKindOfClass:NSClassFromString(@"MPKnockoutButton")] && (tmpBtn.frame.origin.x > screenW*0.5)) {
123+
self.backBtn.center = tmpBtn.center;
124+
tmpBtn.hidden = YES;
125+
[tmpBtn.superview addSubview:self.backBtn];
126+
}
127+
}
128+
}
129+
}
130+
}
131+
}
132+
133+
- (void)moviePlayerLoadStateDidChange:(NSNotification *)aNotification{
134+
if (self.moviePlayer == aNotification.object)
135+
{
136+
switch (self.moviePlayer.loadState) {
137+
case MPMovieLoadStateUnknown:
138+
break;
139+
case MPMovieLoadStatePlayable:
140+
break;
141+
case MPMovieLoadStatePlaythroughOK:
142+
self.playBtn.hidden = YES;
143+
// NSLog(@"-------MPMovieLoadStatePlaythroughOK");
144+
[self setupBtn];
145+
break;
146+
case MPMovieLoadStateStalled:
147+
break;
148+
default:
149+
break;
150+
}
151+
}
152+
}
153+
154+
- (void)moviePlaybackComplete: (NSNotification *)aNotification
155+
{
156+
if (self.moviePlayer == aNotification.object)
157+
{
158+
self.playBtn.hidden = NO;
159+
[self setupBtn];
160+
}
161+
}
162+
163+
- (void)moviePlayStateChanged: (NSNotification *)aNotification
164+
{
165+
if (self.moviePlayer == aNotification.object)
166+
{
167+
switch (self.moviePlayer.playbackState)
168+
{
169+
case MPMoviePlaybackStatePlaying:
170+
[self topStatusUIHidden:YES];
171+
break;
172+
case MPMoviePlaybackStatePaused:
173+
[self.playBtn setHidden:NO];
174+
break;
175+
case MPMoviePlaybackStateStopped:
176+
break;
177+
case MPMoviePlaybackStateInterrupted:
178+
break;
179+
case MPMoviePlaybackStateSeekingBackward:
180+
break;
181+
case MPMoviePlaybackStateSeekingForward:
182+
break;
183+
}
184+
}
185+
}
186+
187+
188+
- (void)topStatusUIHidden:(BOOL)isHidden{
189+
[[UIApplication sharedApplication] setStatusBarHidden:isHidden];
190+
self.playBtn.hidden = isHidden;
191+
192+
}
193+
194+
@end

ios/RCTAuroraIMUI/IMUIMessageCollectionView/Models/IMUIMessageModel.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ open class IMUIMessageModel: NSObject, IMUIMessageModelProtocol {
113113
open func mediaFilePath() -> String {
114114
return ""
115115
}
116-
116+
117117
open func calculateBubbleContentSize() -> CGSize {
118118
var bubbleContentSize: CGSize!
119119

ios/RCTAuroraIMUI/IMUIMessageCollectionView/Protocol/IMUIMessageModelProtocol.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ import UIKit
6868
* @return media file path
6969
*/
7070
func mediaFilePath() -> String
71-
71+
7272
/**
7373
* If message type is voice or video, get duration through this method.
7474
* @return duration of audio or video

ios/RCTAuroraIMUI/IMUIMessageCollectionView/Views/IMUIBaseMessageCell.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,10 @@ open class IMUIBaseMessageCell: UICollectionViewCell, IMUIMessageCellProtocal,Me
232232
// self.delegate?.messageCollectionView?(didTapImageMessageBubbleInCell:rect, model: self.message! )
233233
self.delegate?.messageCollectionView?(didTapMessageBubbleInCell: self, model: self.message!)
234234

235+
}else if self.message?.type == .video && message?.mediaFilePath() != "" {
236+
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "PlayVideoNotification"), object: message?.mediaFilePath())
237+
self.delegate?.messageCollectionView?(didTapMessageBubbleInCell: self, model: self.message!)
238+
235239
}else{
236240
self.delegate?.messageCollectionView?(didTapMessageBubbleInCell: self, model: self.message!)
237241
}

0 commit comments

Comments
 (0)