Создайте массив UiImageVIews для подачи iCarousel из 2 массивов
Я пытаюсь создать NSMutableArray UIImageViews для подачи iCarousel. Каждый UIImageView должен иметь миниатюру видео и метки для имени и длины. Я обнаружил, что создание миниатюр видео при загрузке iCarousel приводит к недопустимой задержке, если загружено более 10 миниатюр видео. я не нашел асинхронного способа создания миниатюр видео, поскольку они требуются iCarousel.
Текущее решение, которое я пытаюсь сделать, - это сохранить как видео, так и соответствующий эскиз в папку документов приложений во время сохранения видео. Затем они загружаются в 2 отсортированных по времени массива (с одинаковым количеством).
Головоломка, которую я пытаюсь решить, - это лучший способ создать новый массив UIImageViews, используя миниатюрное изображение из одного массива, а также имя и длину видео из видео с соответствующим индексом во втором массиве.
Ранее я создавал превью и метки из массива видео, используя этот код.
UIImageView *view = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 200.0f, 135.0f)];
((UIImageView *)view).image = [UIImage imageNamed:@"page.png"];
view.contentMode = UIViewContentModeCenter;
UIImage *thumb = [UIImage imageWithContentsOfFile:anyPath];
UIImageView *imageView = [[UIImageView alloc] initWithFrame:view.bounds];
imageView.tag = 1000;
[imageView setImage:thumb];
[view addSubview:imageView];
UILabel *nameLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 150.f, 200.f, 25.f)];
[nameLabel setTextAlignment:NSTextAlignmentLeft];
[nameLabel setTag:2000];
[nameLabel setTextColor:[UIColor whiteColor]];
[nameLabel setFont:[UIFont fontWithName:@"HelveticaNeue" size:12.f]];
[nameLabel setText:anyPath.lastPathComponent];
[view addSubview:nameLabel];
UILabel *lengthLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 150.f, 200.f, 25.f)];
[lengthLabel setTextAlignment:NSTextAlignmentRight];
[lengthLabel setTag:3000];
[lengthLabel setTextColor:[UIColor whiteColor]];
[lengthLabel setFont:[UIFont fontWithName:@"HelveticaNeue" size:12.f]];
[lengthLabel setText:[MediaManager lengthOfVideoWithPath:anyPath]];
[view addSubview:lengthLabel];
Любые предложения будут ценны.
1 ответ
ОК, решение было использовать блок для создания массива UIImageViews из двух массивов, например, так (это быстро загружает карусель)
[self.aryVideos enumerateObjectsUsingBlock:^(id item, NSUInteger idx, BOOL *stop) {
UIImageView *view = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 200.0f, 135.0f)];
((UIImageView *)view).image = [UIImage imageNamed:@"page.png"];
view.contentMode = UIViewContentModeCenter;
UIImage *thumb = [UIImage imageWithContentsOfFile:self.aryThumbs[idx]];
UIImageView *imageView = [[UIImageView alloc] initWithFrame:view.bounds];
imageView.tag = 1000;
[imageView setImage:thumb];
[view addSubview:imageView];
UILabel *nameLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 150.f, 200.f, 25.f)];
[nameLabel setTextAlignment:NSTextAlignmentLeft];
[nameLabel setTag:2000];
[nameLabel setTextColor:[UIColor whiteColor]];
[nameLabel setFont:[UIFont fontWithName:@"HelveticaNeue" size:12.f]];
NSString *path = [item lastPathComponent];
[nameLabel setText:path];
[view addSubview:nameLabel];
UILabel *lengthLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 150.f, 200.f, 25.f)];
[lengthLabel setTextAlignment:NSTextAlignmentRight];
[lengthLabel setTag:3000];
[lengthLabel setTextColor:[UIColor whiteColor]];
[lengthLabel setFont:[UIFont fontWithName:@"HelveticaNeue" size:12.f]];
[lengthLabel setText:[MediaManager lengthOfVideoWithPath:item]];
[view addSubview:lengthLabel];
[self.aryThumbViews addObject:view];
}];