2013-07-05 2 views
1

У меня есть UIImageView объект с рамкой, скажем, х = 0, у = 100, ширина = 320, высота = 200.Как сделать анимацию, отображающую UIImageView постепенно?

Теперь я хочу сделать анимацию таким образом, что это изображение может быть показано, постепенно, смысл что высота показывающей части постепенно возрастает от 0 до 200.

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

Я также попытался установить «Режим» UIImageView в «Верх», а не «Масштабировать до подходящего». Но поскольку я делаю это в инспекторе XCode, загруженное изображение, например, [email protected], поэтому, если я выберу «Топ», изображение будет в 2 раза больше.

Кстати, я также попытался использовать покровный прямоугольник и переместить его. Но этот метод будет вместе охватывать другие фоновые изображения, поэтому не работает.

Может ли кто-нибудь помочь?

+0

Как интерфейс строитель связано с тем, что изображение будет в 2 раза больше? Каков ваш размер изображения? – StatusReport

+0

@StatusReport, мое изображение 640 * 200 в пикселях, поэтому при отображении в Retina это будет 320 * 100. Но если я отменим «Масштабировать до Fit» в построителе интерфейса, то он будет 640 * 200 в самом начале , – HanXu

+0

В этом случае, чтобы избежать повышающих артефактов, вы действительно захотите получить изображение размером 1280 * 400 пикселей. – StatusReport

ответ

1

Вы можете использовать свойство маски CALayer, которое обращается к изображению (например, imgView.layer.mask). Вы должны быть в состоянии оживить это.

+0

Отлично! Спасибо! – HanXu

0

Сначала укажите высоту Imageview is .

И Возьмите NSTimer(здесь с именем метода doAnimation) и дать его TimeInterVal является Второй.

Здесь doAnimation метод пожар после второй. Напишите код метода doAnimation.

-(void)doAnimation 
{ 
    //// here you can give animation duration as you want. 

    [UIView animateWithDuration:0.35 animations:^{ 
     self.myImageView.frame=CGRectMake(0, 100, 320,200); 

    }]; 
} 

Этот код может помочь вам в вашем случае:

+0

Я не совсем понимаю ваш ответ, но теперь я считаю, что метод FelixLam хорош, во всяком случае, спасибо – HanXu

0

Вы можете добавить это следующим образом:

UIView *view = [[UIView alloc]initWithFrame:CGRectMake(0,0,320,0)]; 
view.clipsToBounds = YES; 
UIImageView *imgView = [[UIImageView alloc]initWithFrame:CGRectMake:(0,0,320,200)]; 
imgView.contentMode = UIViewContentModeScaleAspectFit; 
imgView.image = [UIImage imageNamed:@"your image"]; 
[view addSubview:imgView]; 
[imgView release]; 
[self.view addSubview:view]; 

Теперь вы делаете это:

[UIView beginAnimations:@"" context:nil]; 
[UIView setAnimationDuration:1.5]; 
[view setFrame:CGRectMake(0,0,320,200)]; 
[UIView commitAnimations]; 

Это испытано!

+0

Вдохновляющий! Спасибо. – HanXu

0

может использовать что-то вроде этого

image.transform = CGAffineTransformMakeScale(0.01, 0.01); 
[UIView animateWithDuration:5.0 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{ 
    // animate it to the identity transform (100% scale) 
    image.transform = CGAffineTransformIdentity; 
} completion:^(BOOL finished){ 
    // if you want to do something once the animation finishes, put it here 
}]; 
+0

Это не то, что я хочу, но спасибо вам. – HanXu

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