複数の動画をuicollectionviewに追加する際に問題が発生しています。 複数の画像をuicollectionviewに追加すると、正しく表示されます。 複数の動画を追加しようとすると、最後に追加された動画のみが再生されます。すべてのcellForRowの電話のギャラリーから複数の動画をuicollectionviewに追加する - objective-c
//選択した画像/動画
- (void)chooseExistingImagesButton:(id)sender {
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeSavedPhotosAlbum]) {
UIImagePickerController *picker = [[UIImagePickerController alloc]init];
picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
picker.mediaTypes = [[NSArray alloc] initWithObjects:(NSString *)kUTTypeMovie, (NSString *)kUTTypeVideo, (NSString*)kUTTypeImage, nil];
picker.allowsEditing = NO;
picker.delegate = self;
[self presentViewController:picker animated:YES completion:nil];
}
else {
UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:nil message:@"Sorry, we cannot detect a camera on this device." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
[alertView show];
}
[imageCollectionView reloadData];
[videoCollectionView reloadData]; }
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
[self targetImageArray];
[self targetVideoArray];
NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];
if ([mediaType isEqualToString:(NSString *)kUTTypeImage]) {
NSString *selectedImage = [info objectForKey:UIImagePickerControllerOriginalImage];
[targetImageArray addObject:selectedImage];
[targetImageArray componentsJoinedByString:@","];
}
else if (([mediaType isEqualToString:(NSString *)kUTTypeVideo]) || ([mediaType isEqualToString:(NSString *)kUTTypeMovie])) {
NSString *moviePath = [info objectForKey:UIImagePickerControllerMediaURL];
[targetVideoArray addObject:moviePath];
[targetVideoArray componentsJoinedByString:@","];
}
[imageCollectionView reloadData];
[videoCollectionView reloadData];
[self dismissViewControllerAnimated:YES completion:^{NSLog(@"Finished Picking Image or Video");}]; }
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
[self dismissViewControllerAnimated:YES completion:^{NSLog(@"Image picker view dismissed");}]; }
//ロードcollectionview
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
return 1; }
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
if (collectionView.tag == ImageCell) {
return [targetImageArray count];
}
if (collectionView.tag == VideoCell) {
return [targetVideoArray count];
}
return 0; }
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
if (collectionView.tag == VideoCell) {
static NSString *videoCellIdentifier = @"VideoCell";
TargetVideoCell *videoCell = [collectionView dequeueReusableCellWithReuseIdentifier:videoCellIdentifier forIndexPath:indexPath];
movieUrl = [NSURL URLWithString:[NSString stringWithFormat:@"%@", [targetVideoArray objectAtIndex:indexPath.row]]];
AVURLAsset *asset = [AVURLAsset URLAssetWithURL:movieUrl options:nil];
AVAssetImageGenerator *generator = [AVAssetImageGenerator assetImageGeneratorWithAsset:asset];
generator.appliesPreferredTrackTransform = YES;
UIImage *image = [UIImage imageWithCGImage:[generator copyCGImageAtTime:CMTimeMake(0, 1) actualTime:nil error:nil]];
videoCell.targetMovieView.image = image;
[moviePlayer.view setFrame:videoCell.targetMovieView.frame];
moviePlayer = [[MPMoviePlayerViewController alloc] initWithContentURL:movieUrl];
return videoCell;
}
if (collectionView.tag == ImageCell) {
static NSString *imageCellIdentifier = @"ImageCell";
TargetImageCell *imageCell = [collectionView dequeueReusableCellWithReuseIdentifier:imageCellIdentifier forIndexPath:indexPath];
imageCell.targetImageView.image = [targetImageArray objectAtIndex:indexPath.row];
return imageCell;
}
return 0; }
//再生するビデオ
- (IBAction)playMovie:(id)sender {
[self presentMoviePlayerViewControllerAnimated:moviePlayer];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playMovieFinished:) name:MPMoviePlayerPlaybackDidFinishNotification object:moviePlayer]; }
- (void)playMovieFinished:(NSNotification *)theNotification {
[[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:moviePlayer];
[moviePlayer.view removeFromSuperview];
moviePlayer = nil;
[self dismissMoviePlayerViewControllerAnimated]; }
'のMoviePlayer = [movieUrl [MPMoviePlayerViewControllerのalloc] initWithContentURL]をタップボタンのキャッチイベントがあります。最後のものだけが 'moviePlayer'を持っています。イメージを置くと、セルにはイメージを表示するための独自のプロパティがあります。また、なぜあなたの質問は 'iPad'と' CoreData'でタグ付けされていますか? – Larme
あなたの応答をありがとう、私は両方の画像とビデオアレイをCoreDataにiPadアプリのために保存しています。初めてここに投稿すると、タグを追加すると、それ以上の人々に手を差し伸べるだろうと思った:) – Stephen
問題はあなたの問題がiPadにも適切ではないということです。 (CoreDataの行を配置していないため)。彼らは無関係です。 – Larme