Tworzenie interfejsu użytkownika z adresem URL w systemie iOS
Aby utworzyć interfejs z plikiem obrazu, używam kodu jak poniżej:
UIImage *aImage = [[UIImage imageNamed:@"demo.jpg"]autorelease];
Jeśli chcę utworzyć interfejs użytkownika z adresem URL http://example.com/demo.jpg , Jak to zrobić?
Thanks
UPDATE
3 answers
Jest to proces trzyetapowy. Najpierw utworzysz obiekt NSURL
do przechowywania adresu URL, do którego chcemy uzyskać dostęp. Dostarczymy ten adres URL do metody NSData
class, +dataWithContentsOfURL:
, Aby uzyskać obraz w sieci jako surowe dane, a następnie użyj metody +imageWithData:
class na UIImage
, Aby przekonwertować dane na obraz.
NSURL *imageURL = [NSURL URLWithString:@"http://example.com/demo.jpg"];
NSData *imageData = [NSData dataWithContentsOfURL:imageURL];
UIImage *image = [UIImage imageWithData:imageData];
Należy pamiętać, że +dataWithContentsOfURL:
wykonuje synchroniczne żądanie sieciowe. Jeśli uruchomisz to w głównym wątku, zablokuje to interfejs użytkownika, dopóki dane obrazu nie zostaną odebrane z sieci. Najlepsze praktyka polega na uruchomieniu dowolnego kodu sieciowego w wątku tła. Jeśli kierujesz OS 4.0+, możesz zrobić coś takiego...
NSURL *imageURL = [NSURL URLWithString:@"http://example.com/demo.jpg"];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
NSData *imageData = [NSData dataWithContentsOfURL:imageURL];
dispatch_async(dispatch_get_main_queue(), ^{
// Update the UI
self.imageView.image = [UIImage imageWithData:imageData];
});
});
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-16 17:18:58
Oto jak ten sam kod może wyglądać w Swift:
let image_url = NSURL("http://i.imgur.com/3yY2qdu.jpg")
let priority = DISPATCH_QUEUE_PRIORITY_DEFAULT
dispatch_async(dispatch_get_global_queue(priority, 0)) {
// do some task
let image_data = NSData(contentsOfURL: image_url!)
dispatch_async(dispatch_get_main_queue()) {
// update some UI
let image = UIImage(data: image_data!)
self.imageView.image = image
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-24 01:35:58
Dla każdego, kto chce załadować obraz z sieci, może być pomocna następująca biblioteka:
Https://github.com/rs/SDWebImage
Jest to kategoria UIImageView
, która obsługuje ładowanie asynchroniczne i buforowanie obrazu z adresu url.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-02 19:08:28