2011-01-23 7 views
7

Я пытаюсь оживить высоту изображения (от высоты от 0 до 480 пикселей), чтобы создать эффект изображения, отображаемого сверху вниз.Анимация UIImage или UIImageView?

С UIImageView я заметил, что он корректен в Interface Builder. Но когда он запускается в симуляторе, размер (ширина и высота) всегда устанавливается независимо от размера изображения; значение, если я установил высоту изображения на 50% от первоначальной высоты, изображение все равно будет отображаться на полной высоте.

Я также попытался сделать этот эффект с UIImage. Однако, хотя размер изображения отображается правильно, изображение масштабируется, чтобы отразить соотношение размеров и пропорций.

Вопрос: Как я могу достичь этого динамического размера (то есть анимации размера изображения), а НЕ масштабировать изображение? Я думал об использовании CGImageCreateWithMask, но я уверен, что это создаст огромные икоты производительности.

* Обновление *

Эффект, который им ищет это: анимировать изображение, делая его расти в высоту, от-вниз (как набор жалюзи тянет на окно). Этот образ нельзя масштабировать (поскольку он потеряет визуальный эффект, похожий на «слепой»). Это изображение также должно отображаться поверх другого изображения. Таким образом, всего 2 изображения.

* * ОТВЕТ

В самом верхнем ImageView, я установить режим контента Top (поэтому оно не шкала). Затем в коде я устанавливаю для clipToBounds значение True. Теперь я могу анимировать самую верхнюю высоту изображения, давая мне эффект, который я ищу.

ответ

2

Как уже упоминалось в первоначальном посте, здесь ответ я, кажется, наткнулся :

Для самого верхнего изображения, я установил режим содержимого в Топ (поэтому он не масштабируется). Затем в коде я устанавливаю для clipToBounds значение True. Теперь я могу анимировать самую верхнюю высоту изображения, давая мне эффект, который я ищу.

0

Попробуйте установить свойство UIImageView contentMode в одно из следующих значений.Я думаю, что вам нужно, это UIViewContentModeScaleAspectFit:

typedef enum { 
    UIViewContentModeScaleToFill, 
    UIViewContentModeScaleAspectFit,  // contents scaled to fit with fixed aspect. remainder is transparent 
    UIViewContentModeScaleAspectFill,  // contents scaled to fill with fixed aspect. some portion of content may be clipped. 
    UIViewContentModeRedraw,    // redraw on bounds change (calls -setNeedsDisplay) 
    UIViewContentModeCenter,    // contents remain same size. positioned adjusted. 
    UIViewContentModeTop, 
    UIViewContentModeBottom, 
    UIViewContentModeLeft, 
    UIViewContentModeRight, 
    UIViewContentModeTopLeft, 
    UIViewContentModeTopRight, 
    UIViewContentModeBottomLeft, 
    UIViewContentModeBottomRight, 
} UIViewContentMode; 
+0

Я могу добиться эффекта, который им нужен, если я использую UIViewContentModeTop. Опять же, этот эффект выглядит правильно в IB. Но когда я запускаю симулятор, изображение ВСЕГДА отображается как фактический размер изображения (а не размер, который я указал в IB). – AlvinfromDiaspar

+0

Я смущен о вашем описании. 1) Можете ли вы опубликовать несколько снимков экрана? 2) Хотя у вас есть набор настроек в IB, код может быть изменен/отменен во время выполнения. 3) Симулятор может быть неточным, попробуйте провести тестирование на реальном iPhone. –

+0

Представьте, что веб-страницу отображается на очень медленном соединении. В основном вы видите, как страница рисуется сверху вниз. По сути, я хочу создать этот эффект, когда изображение представляет собой изображение 320x480 (UIImage или UIImageView), медленно увеличивая высоту изображения от y = 0 до y = 480. Режим содержимого определяется как Верх (так, чтобы изображение не масштабировалось при изменении размера границы изображения). – AlvinfromDiaspar

8

Используйте блок анимации, как так:

imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 0)]; 
imageView.image = ...; 
[imageView setClipsToBounds:YES]; 
[imageView setContentMode:UIViewContentModeTop]; 

[self.view addSubview:imageView]; 
[imageView release]; 

[UIView animateWithDuration:4.0f 
         delay:1.0f 
        options:UIViewAnimationOptionCurveEaseIn 
       animations:^(void) { 
        imageView.frame = CGRectMake(0, 0, 320, 480); 
       } 
       completion:NULL]; 
+0

Любопытно, что анимационные блоки лучше, чем использование общих анимаций UIView (где вы находитесь и совершать анимацию)? – AlvinfromDiaspar

+0

@AlvinfromDiaspar. Теперь они рекомендуются для анимации с iOS 4. –

+0

@AlvinfromDiaspar Работает ли мой пример? Я тестировал его локально, и он работает красиво. –

2

Просто предложение, предположим, у вас есть два изображения: A и X (рентгеновское изображение):

+-------+    +-------+ 
|  |    |  | 
|  |    |  | 
| A |    | X | 
|  |    |  | 
|  |    |  | 
+-------+    +-------+ 

Динамически вы можете создать один пиксель изображения высокого (TEMP), скопировать содержимое из X частично, положить его на вершине A:

+-------+ +-------+ +-------+ 
|  | | temp1 | < |  | 
|  | +-------+ |  | 
| A |    | X | 
|  |    |  | 
|  |    |  | 
+-------+    +-------+ 

В цикле, динамически создавать/изменять размеры временный файл, а затем скопировать больше контента из X:

+-------+ +-------+ +-------+ 
|  | | temp2 | < |  | 
|  | |  | |  | 
| A | +-------+ | X | 
|  |    |  | 
|  |    |  | 
+-------+    +-------+ 

+-------+ +-------+ +-------+ 
|  | | temp3 | < |  | 
|  | |  | |  | 
| A | |  | | X | 
|  | +-------+ |  | 
|  |    |  | 
+-------+    +-------+ 
+-------+ +-------+ +-------+ 
|  | | temp4 | < |  | 
|  | |  | |  | 
| A | |  | | X | 
|  | |  | |  | 
|  | +-------+ |  | 
+-------+    +-------+ 

+-------+ +-------+ +-------+ 
|  | | tempX | < |  | 
|  | |  | |  | 
| A | |  | | X | 
|  | |  | |  | 
|  | |  | |  | 
+-------+ +-------+ +-------+ 
+0

Я подумал об этом, но не сделал этого, потому что знал, что это будет действительно неэффективно, и не говоря уже о том, что он очень медленный/прерывистый. – AlvinfromDiaspar

+0

Пропустили ваш обновленный ответ, я предположил, что изображение рентгеновского снимка не следует масштабировать ... – ohho

0

Вы должны посмотреть на Flip Clock для учебника iPad. Это с основной анимацией, следовательно, имеет бонус производительности.

+0

UH OH. СМОТРЕТЬ, ЧТО ВЫ ДОСТИГНУТЫ СТРАНИЦЫ, КОТОРЫЕ НЕ СУЩЕСТВУЮТ. –

Смежные вопросы