най-добрата практика на iphone, как да заредите множество висококачествени изображения

Имам около 20 изображения с високо качество (~3840x5800 px), които трябва да заредя в обикновено приложение тип галерия. Потребителят щраква върху бутон и следващото изображение се зарежда в UIImageView.

В момента използвам [UIImage imageWithContentsOfFile:], което отнема около 6 секунди, за да зареди всяко изображение в симулатора :(

ако използвам [UIImage imageNamed:], зареждането отнема още повече време, но кешира изображенията, което означава, че е по-бързо, ако потребителят иска да види същите изображения отново. Но това може да причини проблеми с паметта по-късно с цялото това кеширане, което срива приложението ми.

Искам да знам каква е най-добрата практика за зареждане на тези? Експериментирам с намаляването на размера на файла с изображение, доколкото е възможно, но наистина имам нужда те да бъдат висококачествени изображения за целите на приложението (с възможност за мащабиране и т.н.).

Благодаря за всякакви съвети

[РЕДАКТИРАНЕ]

Здравейте отново момчета,

Благодаря за всичките ви съвети. Спецификациите на проекта са се променили малко. Сега, освен показването на изображенията, те първо трябва да бъдат увеличени до определено място и когато потребителят докосне next, мащабът се намалява и след това се показва следващото изображение. Така че не съм сигурен дали предложените решения пасват?


person bennythemink    schedule 16.03.2011    source източник
comment
Ако имате нужда от толкова големи, защото искате да могат да се мащабират, бих ви предложил да ги фрагментирате и да заредите само частите, които се виждат в момента, като стил на Google Maps. Нещо като 100x100 трябва да свърши работа.   -  person jakev    schedule 16.03.2011
comment
благодаря NS6String, работя по друг проект, но ще се върна към него през следващата седмица и ще разгледам всичко, което казахте, и ще публикувам отново тук   -  person bennythemink    schedule 22.03.2011


Отговори (3)


Документите на Apple препоръчват да не се опитвате да заредете единични изображения, които са по-големи от 1024x1024. Трябва да разгледате използването на CATiledLayer вместо това, за да заредите части от изображенията според нуждите.

person Anomie    schedule 16.03.2011
comment
Има страхотен видеоклип WWDC10 за използването на това. Освен това CIMGF току-що имаше добра публикация за това как да го направя. cimgf.com/2011/03/01/subduing-catiledlayer - person Walter; 16.03.2011
comment
Здравейте, Anomie и Walter, благодаря за съвета, работя по друг проект, но ще се върна към него през следващата седмица и ще разгледам всичко, което казахте, и ще публикувам отново тук - person bennythemink; 22.03.2011
comment
@walter - имаш ли линк към видеото WWDC10 за фотоскролера? Не мога да го намеря. - person Ser Pounce; 19.01.2012
comment
developer.apple.com/videos/wwdc/2010/index.php и влезте с вашия акаунт на програмист. - person Walter; 19.01.2012

Можете да разгледате тази проба на Apple: http://developer.apple.com/library/ios/#samplecode/PhotoScroller/Introduction/Intro.html#//apple_ref/doc/uid/DTS40010080

Показва как да зареждате големи изображения, като ги разделяте на плочки за различни нива на увеличение.

person Riccardo Trocca    schedule 16.03.2011
comment
Хей Swisstricky, работя върху друг проект, но ще се върна към него през следващата седмица и ще разгледам всичко, което казахте, и ще публикувам отново тук, благодаря за съвета! - person bennythemink; 22.03.2011

Не можете да видите всички тези пиксели в даден момент, така че няма нужда да ги зареждате всички. Заредете копия с по-ниска разделителна способност („големи миниатюри“), за да видите цялото изображение, след това избрани подплочки, може би от 2 или повече различни комплекта разделителни способности, след като потребителят увеличи.

CATiledLayer API може да успее да се справи с някои от последните вместо вас.

person hotpaw2    schedule 16.03.2011
comment
благодаря hotpaw2, работя върху друг проект, но ще се върна към него през следващата седмица и ще разгледам всичко, което казахте, и ще публикувам отново тук - person bennythemink; 22.03.2011