TTPhotoViewController: отключить автоматическое масштабирование галереи

В своем проекте я использую Facebook API "three20": https://github.com/facebook/three20/

Теперь мне нужно настроить TTPhotoViewController. В галерее есть «автоматический зум». Всегда используются полная ширина и высота: введите здесь описание изображения

Недостатком является то, что вы не можете видеть полную фотографию, а важная информация может быть обрезана / обрезана.

Как отключить автоматический зум?

Спасибо!


РЕДАКТИРОВАТЬ 03 марта 2011 г .:

Ответ Романа вроде хорош, но, к сожалению, мне это не помогает. Да, проблема в режиме содержимого UIViewContentModeScaleAspectFill:

Масштабирует содержимое, чтобы заполнить размер представления. Некоторая часть контента может быть обрезана, чтобы заполнить границы представления.

Но нет другого режима содержимого, который решил бы мою проблему. Думаю, мне нужно заглянуть глубоко внутрь three20 и самостоятельно масштабировать изображения. Но для этого мне нужна твоя помощь! Итак, начну новую "награду" сегодня (03.03.2011) ...

Большое Вам спасибо!!


РЕДАКТИРОВАТЬ 07 марта 2011 г .:

Наконец то я понял!! Роман ответ правильный, я должен использовать UIViewContentModeScaleAspectFit.

Проблема заключалась в следующем: я использую неправильный размер в моем Photo-объекте! У меня сработало 320х480:

NSMutableArray *photos = [NSMutableArray new];

for (Information *info in allImages) {
    NSString *binaryId = info.binary;

    NSString *fileName = [NSString stringWithFormat:@"documents://img/%@.jpg", binaryId];

    Photo *photo = [[[Photo alloc] initWithCaption:info.name 
                                              urlLarge:fileName 
                                              urlSmall:fileName 
                                              urlThumb:fileName 
                                              size:CGSizeMake(320, 480)] autorelease];

    [photos addObject:photo];

}

self.photoSource = [[PhotoSet alloc] initWithTitle:@"Photos" photos:photos];

person Manni    schedule 24.01.2011    source источник


Ответы (3)


Самый простой способ - взломать TTPhotoView - примерно в строке 135 (функция setImage) изменится

self.contentMode = UIViewContentModeScaleAspectFill;

to

self.contentMode = UIViewContentModeScaleAspectFit;

к сожалению, в настоящее время другого пути нет.

person roman    schedule 24.01.2011
comment
Большое спасибо за ответ! Теперь у меня новая проблема: если изображение меньше экрана, оно больше не будет увеличиваться. Для изображения все стороны остаются черными, маленькое изображение находится посередине. - person Manni; 24.01.2011
comment
в этом случае вам нужно еще немного взломать setImage и использовать другой contentMode в зависимости от размера изображения - person roman; 25.01.2011
comment
Роман, для моей цели нет contentMode, поэтому я не могу использовать другой contentMode в зависимости от размера изображения. ... Заливка обрезает изображение, а ... Подгонка не масштабирует маленькие изображения. Для описанной мной проблемы нет contentMode. Думаю, мне придется выбрать другой способ и масштабировать (увеличить / уменьшить) изображение самостоятельно. Можешь мне помочь? - person Manni; 02.03.2011

Вы должны поручить свой вопрос Роману, потому что он отвечает на ваш конкретный вопрос, но я хочу предложить вам не использовать three20 и реализовать свой скроллер изображений самостоятельно. Взгляните на сеанс 104, Разработка приложений с использованием прокручиваемых представлений (требуется вход в ADC) из Видео сессий WWDC 2010 в iTunes. В нем подробно рассказывается, как реализовать этот тип интерфейса, и вы можете сохранить свое приложение компактным, не добавляя в код всю библиотеку three20.

person Matt Long    schedule 23.02.2011
comment
Вы должны передать свой вопрос Роману. Я добавляю награду через много недель ПОСЛЕ ответа Романа, потому что я надеялся, что я получу более подробное решение. - person Manni; 01.03.2011

Внесите это изменение в класс TTScrollView

В методе

- (CGRect)frameOfPageAtIndex:(NSInteger)pageIndex 

В этом методе измените следующую строку

if (size.width > size.height) { 

to

if (size.width / size.height > self.width / self.height) { 

Это сработало для меня.

person lostInTransit    schedule 05.03.2011
comment
Спасибо за ваш ответ! Какую версию three20 вы используете? Я не могу найти строку if (size.width ›size.height) в методе frameOfPageAtIndex. Сообщите мне номер строки в текущей версии: github .com / facebook / three20 / blob / master / src / Three20UI / Sources /. - person Manni; 05.03.2011
comment
Извините, не проверил последний код. Думаю, изменение было наконец объединено (не было, когда я использовал библиотеку). Это должно решить проблему, с которой вы столкнулись (по крайней мере, для меня) - person lostInTransit; 05.03.2011
comment
К сожалению, three20 ведет себя именно так, как я описал выше. Всегда весь экран заполнен и так получалось, что длинные изображения обрезались по кусочкам. Поведение точно соответствует свойству UIViewContentModeScaleAspectFill. Не могли бы вы проверить, есть ли UIViewContentModeScaleAspectFill в вашей старой версии? - person Manni; 05.03.2011