iOS загрузить изображение на основе пользовательского ввода - PullRequest
0 голосов
/ 27 июля 2011

довольно новый для разработки Objective-C и iOS (из PHP), и у меня есть относительно простой вопрос, на который я не могу найти ответ:

Я следую наряду с примером длядизайн разделенного представления, в котором веб-страница загружается в подробный вид, когда пользователь щелкает элемент в главном представлении.Я получил все это работает, но хотел бы заменить веб-вид на изображение.Поэтому я исправил приложение, чтобы загрузить UIImage вместо WebView.То, что я ищу, является эквивалентом этого кода:

NSString *urlString = [pagesAddress objectAtIndex:indexPath.row];
NSURL *url = [NSURL URLWithString:urlString];

// these 2 is where I get lost with the images.
NSURLRequest = *request = [NSURLRequest requestWithURL:url];
[detailViewController.webView loadRequest:request];

Я пришел с этим:

NSString *imageName = [pagesAddress objectAtIndex:indexPath.row];
UIImage *myImage = [UIImage imageNamed:imageName];

// missing the last 2 calls: one to tell Xcode that it's an image "request" I want and the second to load the actual image (based on it's name that is already in an array) into the ImageView.

Спасибо.

PS

Я попробовал это:

NSString *imageName = [pagesAddress objectAtIndex:indexPath .row];
[detailViewController.imageView setImage:[UIImage imageNamed:imageName]]; 

И он показывает только первое изображение, а затем вылетает, когда я пытаюсь показать последнее.

Ответы [ 3 ]

0 голосов
/ 27 июля 2011

Попробуйте это (на iOS 4.0 и более поздних версиях):

// Execute a block of code on a background thread.
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),
               ^(void) 
{
    NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
    UIImage* image = [UIImage imageWithData:[NSData dataWithContentsOfURL:url]];
    // When IO is done and image created, set it on the main thread.
    dispatch_async(dispatch_get_main_queue(), 
                   ^(void) 
    {
        imageView.image = image;
    });
    [pool release];
});
0 голосов
/ 28 июля 2011

В итоге решением были те две строки, когда я исправил код:

NSString *imageName = [pagesAddress objectAtIndex:indexPath.row];
[detailViewController.imageView setImage:[UIImage imageNamed:imageName]];

Обратите внимание, что мне пришлось изменить setImage, чтобы преобразовать NSString в UIImage, или Xcode будет жаловаться. Оказывается, это было сбоем, потому что в массиве, где у меня были имена изображений, я поместил 3 изображения в одну запись (в основном я забыл запятые!), Так что это было вне диапазона.

Тим:

Эта строка, которую вы мне дали

UIImageView *imageView = [[UIImageView alloc] initWithFrame:self.view.bounds];

не требуется, потому что у меня уже есть созданное представление, оно создаст другое представление, которое я никогда не использовал. Кроме того, замена его на CGRect кажется излишней, если у меня уже есть UIImage заполнитель нет?

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

Приветствия.

0 голосов
/ 27 июля 2011

Попробуйте это:

UIImage *myImage = [[UIImage alloc] initWithData:[NSData dataWithConentsOfURL:[NSURL URLWithString:urlString];
// don't know if you already got the following?
UIImageView *imageView = [[UIImageView alloc] initWithFrame:self.view.bounds];
[imageView setImage:myImage];
[self.view addSubview:imageView];

Первая строка является синхронной (= блокировка), поэтому в производстве вам лучше использовать - [NSURLRequest start] для этого (но это немного сложнее).


Или используйте это для локальных изображений:

UIImage *myImage = [UIImage imageNamed:imageName];
// Now, follow the same steps as in the first code-example, just skip the first line.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...