UIView анимация, чтобы скользить вниз - PullRequest
5 голосов
/ 27 июля 2011

Я пытаюсь скользить вниз по изображению в UIImageView, но я не знаю, какая комбинация UIContentMode и свойства анимации является правильной для этого. Изображение должно всегда иметь одинаковый размер и не должно быть растянуто ... все, что я хочу, это чтобы сначала ничего не было видно, а затем рамка расширялась и открывала изображение.

Может быть, проще, если вы поймете, что я имею в виду:

Illustration of my Problem

Итак, это звучит довольно просто, но какой UIContentMode я должен использовать для UIImageView и какое свойство я должен анимировать? Спасибо!

Ответы [ 2 ]

8 голосов
/ 28 июля 2011

Я взял на себя инициативу и также сделал скринкаст. Это было то, что вы имели в виду?

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

Для этого я использовал Core Animation вместо анимации UIView, поскольку я хотел использовать свойство mask CALayerскройте поповер и раскройте его с помощью скользящей анимации.

Вот код, который я использовал (такой же, как в видео):

- (void)viewDidLoad
{

    // Declaring the popover layer
    CALayer *popover = [CALayer layer];

    CGFloat popoverHeight = 64.0f;
    CGFloat popoverWidth = 200.0f;

    popover.frame = CGRectMake(50.0f, 100.0f, popoverWidth, popoverHeight);
    popover.contents = (id) [UIImage imageNamed:@"popover.png"].CGImage;

    // Declaring the mask layer
    CALayer *maskLayer = [CALayer layer];
    maskLayer.frame = CGRectMake(0, - popoverHeight, popoverWidth, popoverHeight);
    maskLayer.backgroundColor = [UIColor colorWithRed:1.0f green:1.0f blue:1.0f alpha:1.0f].CGColor;

    // Setting the animation (animates the mask layer)
    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position.y"];
    animation.byValue = [NSNumber numberWithFloat:popoverHeight];
    animation.repeatCount = HUGE_VALF;
    animation.duration = 2.0f;

    [maskLayer addAnimation:animation forKey:@"position.y"];

    //Assigning the animated maskLayer to the mask property of your popover
    popover.mask = maskLayer;

    [self.view.layer addSublayer:popover];

    [super viewDidLoad];
}

ПРИМЕЧАНИЕ: У вас естьчтобы импортировать платформу QuartzCore в ваш проект и записать эту строку в заголовочном файле: #import <QuartzCore/QuartzCore.h>.

Сообщает, работает ли это для вас или вам нужна дополнительная помощь при настройке.

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

Попробуйте этот код.Рассматривайте UIImageView как imageView.

imageView.contentMode = UIViewContentModeScaleAspectFill;
CGRect imageRect = imageView.frame;
CGRect origImgRect = imageRect;
imageRect.size.height = 5;
imageView.frame = imageRect;

[UIView animateWithDuration:2.0
     animations:^{imageView.rect = origImgRect;}
     completion:^(BOOL finished){  }];
...