-1

たとえば、進行状況ビューを使用した複数のビデオのアップロードを探しています。ここで私はステップを定義しました。

  1. ギャラリーを開き、ビデオを選択します。
  2. ギャラリーからビデオを選択し、選択内容を編集した後、サム イメージを作成します。
  3. 選択したすべてのビデオは、テーブルビューまたはコレクション ビューでサム イメージとともに表示されます
  4. Tableview または Collection ビューでビデオのアップロード プロセスを進行状況とともに表示します。

誰でもそれを行う方法を知っています、私は私にとって役に立ちます。

NSUrlsession UPload タスクを使用できますが、実装できない可能性があります。

4

1 に答える 1

2
  1. これにはMWPhotoBrowserを使用できます
  2. 以下のメソッドを使用して、選択したビデオのサム イメージを生成できます。

    - (UIImage *)generateThumbImage : (NSString *)filepath {
          NSURL *url = [NSURL fileURLWithPath:filepath];
          AVAsset *asset = [AVAsset assetWithURL:url];
          AVAssetImageGenerator *imageGenerator = [[AVAssetImageGenerator alloc]initWithAsset:asset];
          imageGenerator.appliesPreferredTrackTransform = YES;
          CMTime time = [asset duration];
          time.value = 2;
          CGImageRef imageRef = [imageGenerator copyCGImageAtTime:time actualTime:NULL error:NULL];
          UIImage *thumbnail = [UIImage imageWithCGImage:imageRef];
          CGImageRelease(imageRef);  // CGImageRef won't be released by ARC
    
          return thumbnail;
    }
    
  3. このために、「MWPhotoBrowser」をチェックして、生成されたサムネイル画像を表示に渡すことができます。
  4. これにはAFNetworking 3.0を使用できます。そして、NSObjectすべてのファイルを管理する 1 つのファイル クラスを作成します。imageView と progressView を持つ collectionView を作成します。その collectionView タイプはファイル タイプです。

    @interface File : NSObject
    
    @property (nonatomic, strong) NSString *fullFilePath;
    @property (nonatomic) float overAllProgress;
    - (void)sendFile;
    
    @end
    
    
    @implementation File
    
    - (void)sendFile {
        NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST"            URLString:@"http://localhost/upload.php" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
    
         [formData appendPartWithFileURL:[NSURL fileURLWithPath:self.fullFilePath] name:@"photo_path" fileName:self.relativePath mimeType:@"video/quicktime" error:nil];
    
        } error:nil];
    
        AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
    
        NSURLSessionUploadTask *uploadTask;
        uploadTask = [manager
            uploadTaskWithStreamedRequest:request
            progress:^(NSProgress * _Nonnull uploadProgress) {
          // This is not called back on the main queue.
          // You are responsible for dispatching to the main queue for UI updates
          dispatch_async(dispatch_get_main_queue(), ^{
              //Update the progress view
              self.overAllProgress = uploadProgress.fractionCompleted;
              [[NSNotificationCenter defaultCenter] postNotificationName:@"imageprogress" object:self]
             });
          }
          completionHandler:^(NSURLResponse * _Nonnull response, id  _Nullable responseObject, NSError * _Nullable error) {
            if (error) {
               NSLog(@"Error: %@", error);
            } else {
               NSLog(@"%@ %@", response, responseObject);
            }
          }];
    
          [uploadTask resume]; 
    
      @end
    

ここで、ファイルの進行状況の通知を処理する必要があります。以下のように。

-(void) viewWillAppear:(BOOL)animated{
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(fileProgress:) name:@"imageprogress" object:nil];
}

- (void)viewDidUnload{
   [super viewDidUnload];
   // Release any retained subviews of the main view.
  [[NSNotificationCenter defaultCenter] removeObserver:self name:@"imageprogress" object:nil];
 }

- (void)fileProgress:(NSNotification *)notif{

      File * info = [notif object];
      if([_arrFiles containsObject:info]){
          NSInteger row = [_arrFiles indexOfObject:info];
          NSIndexPath * indexPath = [NSIndexPath indexPathForRow:row inSection:0];
          UICollectionViewCell *cell = [self.collectionView cellForItemAtIndexPath:indexPath];

         [cell.progressView setProgress:info.overAllProgress animated:YES]

       }
}
于 2016-07-25T12:00:03.953 に答える