Я конвертирую свое приложение IPhone в IPad, и у меня возникла проблема с преобразованием. У меня есть фоновый поток, который создает несколько эскизов.Задержка на IPad при вызове из фонового потока
Проблема заключается в том, что приложение перемещается по всему массиву и выводит все элементы, но только последний элемент, по-видимому, загружается с текстом UIButton. Задержка 5-15 секунд до того, как все предыдущие кнопки отображают текст.
UIImage *tmp = [self thumbnailImage:[effect objectAtIndex:0] thumbnailType:@"category"];
for (id effect in effectArray) {
UIImage *tmp = [self thumbnailImage:[effect objectAtIndex:0] thumbnailType:@"category"];
dispatch_async(dispatch_get_main_queue(), ^{
UIView *effectView = [[UIView alloc] initWithFrame:CGRectMake(item_x_axis, current_row_height, item_width, item_height)];
UIImageView *imagepreview = [[UIImageView alloc] init];
[imagepreview setFrame:CGRectMake(20, 20, 100, 100)];
[imagepreview setImage:tmp];
imagepreview.contentMode = UIViewContentModeScaleAspectFit;
imagepreview.layer.shadowColor = [UIColor blackColor].CGColor;
imagepreview.layer.shadowOffset = CGSizeMake(0, 1);
imagepreview.layer.shadowOpacity = 1;
imagepreview.layer.shadowRadius = 2.0;
imagepreview.clipsToBounds = NO;
[effectView addSubview:imagepreview];
if([[effect objectAtIndex:3] isEqualToString:@"iap"]){
UIImageView *buttonPlus = [[UIImageView alloc] init];
[buttonPlus setFrame:CGRectMake(54, 66, 23, 23)];
[buttonPlus setImage:[UIImage imageNamed:@"ButtonPlus.png"]];
[effectView addSubview:buttonPlus];
}
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button addTarget:self action:NSSelectorFromString([effect objectAtIndex:1]) forControlEvents:UIControlEventTouchDown];
[button setTitle:[effect objectAtIndex:2] forState:UIControlStateNormal];
button.frame = CGRectMake(0, 0, item_width, item_height);
button.titleLabel.font = [UIFont systemFontOfSize:11];
[button setTitleShadowColor:[UIColor blackColor] forState:UIControlStateNormal];
[button.titleLabel setShadowOffset:CGSizeMake(1.0f, 1.0f)];
[button setTitleEdgeInsets:UIEdgeInsetsMake(120, 0, 0.0, 0.0)];
[effectView addSubview:button];
[self.viewScrollCategories addSubview:effectView];
button = nil;
});
if(current_items_per_row < 3){
current_items_per_row++;
item_x_axis = item_x_axis + item_width;
}else {
current_row_height = current_row_height + item_height;
current_items_per_row = 1;
item_x_axis = 0;
}
}
Любая идея, как решить эту проблему? он, похоже, отлично работал на IPhone.
EDIT
Это код, который звонит фоновый поток (shortned)
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo: (NSDictionary *)info {
//[self generatingThumbnailMessageShow];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[self loadAllEffects];
dispatch_async(dispatch_get_main_queue(), ^{
[self generatingThumbnailMessageHide];
});
});
}
Хм. Позвольте мне спросить вас об этом. Почему вы в первую очередь попадаете в фоновый поток? Есть что-то здесь, что занимает очень много времени? – matt
Да, редактирование изображений занимает много времени. Поток генерирует отредактированные изображения с использованием разных эффектов, и есть 20+ эффектов, поэтому требуется несколько секунд или два, чтобы редактировать все изображения и создавать эскизы. – ORStudios
Ну, глядя на ваш код, мне кажется, что то, что вы делаете в основном потоке, должно быть очень быстрым: вы просто создаете некоторые подзапросы и вставляете их в интерфейс. Таким образом, задержка, которую вы испытываете, может исходить от редактирования изображения. – matt