UIButton зависает - PullRequest
0 голосов
/ 19 мая 2011

У меня есть два контроллера представления. В первом UIViewController у меня есть кнопка, которая при нажатии приведет вас ко второму контроллеру представления, где отображаются два изображения. Изображения взяты из URL, поэтому я использую NSData и инициализирую UIImageи назначьте его для UIImageView.

Теперь проблема заключается в том, что когда я нажимаю кнопку UIB в первом контроллере вида, кнопка остается в нажатом состоянии в течение нескольких секунд, а затем перемещается во второй контроллер вида для отображенияimages.

    UIImage *Image1=[UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:URL_STRING]]];
    imageView1.contentMode=UIViewContentModeScaleAspectFit;
    imageView1.image=Image1;
    UIImage *Image2=[UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:URL_STRING]]];
    imageView2.contentMode=UIViewContentModeScaleAspectFit;
    imageView2.image=agent_logo_image;

Пожалуйста, кто-нибудь предложит мне подходящее решение этой проблемы.

Спасибо

Ответы [ 3 ]

0 голосов
/ 19 мая 2011

В основном при прикосновении к кнопке. Вы подключаетесь к URL-адресу для получения изображения.

Эта процедура в главном потоке приводит к зависанию пользовательского интерфейса на пару секунд.

Я бы предложилВы помещаете часть захвата изображения в:

self performSelectorInBackground:@selector() withObject: функцию.

, а затем после захвата изображения изображения используйте:

self performSelectorOnMainThread:@selector() withObject: waitUntilDone:, чтобы переключиться обратно к основному потокуи отображать ваши изображения.

надеюсь, это поможет ..:)

0 голосов
/ 19 мая 2011

В соответствии с вашим вопросом данные изображения поступают из интернета, поэтому потребуется некоторое время, чтобы данные были извлечены из интернета и отображены на изображении, поэтому в этом случае я предлагаю вам использоватьпоток для такого рода вещей, вот код, который я использовал на основе вашей проблемы, он должен прекрасно работать

-(void)getImages
{
    NSString *firstImageURL = @"http://fc00.deviantart.net/fs33/i/2008/293/8/6/Wood_Apple_Wallpaper_by_diegocadorin.jpg";
    NSString *secondImageURL = @"http://i1-mac.softpedia-static.com/screenshots/Byte-Apple-Wallpaper_3.png";
    NSAutoreleasePool *threadPool = [[NSAutoreleasePool alloc]init];

    NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:firstImageURL]];
    NSData *data2 = [NSData dataWithContentsOfURL:[NSURL URLWithString:secondImageURL]];
    UIImage * img = [[UIImage alloc]initWithData:data];
    UIImage *_img = [[UIImage alloc]initWithData:data2];
    img1.image = img ;
    img2.image = _img;
    [img release];
    [_img release];
    [threadPool drain];

}

здесь img1 и img2 являются объектами класса UIImageVIew

и вМетод init вызывает эту функцию, используя класс NSThread

[NSThread detachNewThreadSelector:@selector(getImages) toTarget:self withObject:nil];

Спасибо и С уважением

0 голосов
/ 19 мая 2011

Ваша проблема в том, что вы делаете синхронный запрос для получения изображений. Это означает, что ваш основной поток ожидает загрузки изображения, а затем он продолжает работу с остальной частью потока. Таким образом, «замороженная» кнопка является просто признаком того, что что-то происходит в главном потоке, и это «что-то» должно быть завершено в первую очередь. Решение состоит в том, чтобы сделать асинхронный вызов для получения изображений. Я бы порекомендовал использовать ASIHTTPRequest для такого рода вещей, поскольку он относительно прост в использовании и избавляет вас от большой работы. Если вы не хотите использовать библиотеку, вам нужно взглянуть на « Асинхронная загрузка данных » в справочнике по классам NSURLConnection.

...