iPhone UIView 애니메이션 모범 사례
iPhone에서 뷰 전환에 애니메이션을 적용하는 가장 좋은 방법은 무엇입니까?
예를 들어 ViewTransitions
apple 의 샘플 프로젝트는 다음과 같은 코드를 사용합니다.
CATransition *applicationLoadViewIn = [CATransition animation];
[applicationLoadViewIn setDuration:1];
[applicationLoadViewIn setType:kCATransitionReveal];
[applicationLoadViewIn setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]];
[[myview layer] addAnimation:applicationLoadViewIn forKey:kCATransitionReveal];
그러나 다음과 같이 그물 주위에 떠 다니는 코드 스 니펫도 있습니다.
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.75];
[UIView setAnimationDelegate:self];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:myview cache:YES];
[myview removeFromSuperview];
[UIView commitAnimations];
가장 좋은 방법은 무엇입니까? 스 니펫을 제공 할 수 있다면 대단히 감사하겠습니다.
참고 : 두 번째 방법으로 올바르게 작동하지 못했습니다.
로부터 UIView의 참조 정보]의 섹션 beginAnimations:context:
방법 :
iPhone OS 4.0 이상에서는이 방법을 사용하지 않는 것이 좋습니다. 대신 블록 기반 애니메이션 방법을 사용해야합니다.
Tom의 코멘트를 기반으로 한 블록 기반 애니메이션의 예
[UIView transitionWithView:mysuperview
duration:0.75
options:UIViewAnimationTransitionFlipFromRight
animations:^{
[myview removeFromSuperview];
}
completion:nil];
나는 멋진 멋진 애니메이션을 위해 후자를 사용했습니다. 두 개의 뷰를 크로스 페이드로 사용하거나 다른 뷰를 페이드 아웃하거나 페이드 아웃 할 수 있습니다. 배너처럼 다른 화면을 통해 사진을 찍을 수 있고, 화면을 늘리거나 줄일 수 있습니다 . beginAnimation
/ 에서 마일리지가 많이 발생합니다 commitAnimations
.
당신이 할 수있는 모든 것이 있다고 생각하지 마십시오 :
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:myview cache:YES];
다음은 샘플입니다.
[UIView beginAnimations:nil context:NULL]; {
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationDuration:1.0];
[UIView setAnimationDelegate:self];
if (movingViewIn) {
// after the animation is over, call afterAnimationProceedWithGame
// to start the game
[UIView setAnimationDidStopSelector:@selector(afterAnimationProceedWithGame)];
// [UIView setAnimationRepeatCount:5.0]; // don't forget you can repeat an animation
// [UIView setAnimationDelay:0.50];
// [UIView setAnimationRepeatAutoreverses:YES];
gameView.alpha = 1.0;
topGameView.alpha = 1.0;
viewrect1.origin.y = selfrect.size.height - (viewrect1.size.height);
viewrect2.origin.y = -20;
topGameView.alpha = 1.0;
}
else {
// call putBackStatusBar after animation to restore the state after this animation
[UIView setAnimationDidStopSelector:@selector(putBackStatusBar)];
gameView.alpha = 0.0;
topGameView.alpha = 0.0;
}
[gameView setFrame:viewrect1];
[topGameView setFrame:viewrect2];
} [UIView commitAnimations];
보시다시피 알파, 프레임 및보기 크기까지 재생할 수 있습니다. 놀아 당신은 그 기능에 놀랄 수 있습니다.
차이점은 애니메이션에 필요한 제어량 인 것 같습니다.
이 CATransition
접근 방식을 통해보다 많은 제어 기능을 제공 할 수 있습니다. 타이밍 기능. 객체이기 때문에 나중에 저장하고 리 팩터하여 모든 애니메이션이 객체를 가리 키도록하여 코드 복제 등을 줄일 수 있습니다.
The UIView
class methods are convenience methods for common animations, but are more limited than CATransition
. For example, there are only four possible transition types (flip left, flip right, curl up, curl down). If you wanted to do a fade in, you'd have to either dig down to CATransition's
fade transition, or set up an explicit animation of your UIView
's alpha.
Note that CATransition
on Mac OS X will let you specify an arbitrary CoreImage
filter to use as a transition, but as it stands now you can't do this on the iPhone, which lacks CoreImage
.
We can animate images in ios 5 using this simple code.
CGRect imageFrame = imageView.frame;
imageFrame.origin.y = self.view.bounds.size.height;
[UIView animateWithDuration:0.5
delay:1.0
options: UIViewAnimationCurveEaseOut
animations:^{
imageView.frame = imageFrame;
}
completion:^(BOOL finished){
NSLog(@"Done!");
}];
In the UIView
docs, have a read about this function for ios4+
+ (void)transitionFromView:(UIView *)fromView toView:(UIView *)toView duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options completion:(void (^)(BOOL finished))completion
Anyway the "Block" method is preffered now-a-days. I will explain the simple block below.
Consider the snipped below. bug2 and bug 3 are imageViews. The below animation describes an animation with 1 second duration after a delay of 1 second. The bug3 is moved from its center to bug2's center. Once the animation is completed it will be logged "Center Animation Done!".
-(void)centerAnimation:(id)sender
{
NSLog(@"Center animation triggered!");
CGPoint bug2Center = bug2.center;
[UIView animateWithDuration:1
delay:1.0
options: UIViewAnimationCurveEaseOut
animations:^{
bug3.center = bug2Center;
}
completion:^(BOOL finished){
NSLog(@"Center Animation Done!");
}];
}
Hope that's clean!!!
I found a good tutorial in this link. Hope this will be helpful for some one.
Here is Code for Smooth animation, might Be helpful for many developers.
I found this snippet of code from this tutorial.
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
[animation setAutoreverses:YES];
[animation setFromValue:[NSNumber numberWithFloat:1.3f]];
[animation setToValue:[NSNumber numberWithFloat:1.f]];
[animation setDuration:2.f];
[animation setRemovedOnCompletion:NO];
[animation setFillMode:kCAFillModeForwards];
[[self.myView layer] addAnimation:animation forKey:@"scale"];/// add here any Controller that you want t put Smooth animation.
let's do try and checkout For Swift 3...
UIView.transition(with: mysuperview, duration: 0.75, options:UIViewAnimationOptions.transitionFlipFromRight , animations: {
myview.removeFromSuperview()
}, completion: nil)
참고URL : https://stackoverflow.com/questions/630265/iphone-uiview-animation-best-practice
'programing tip' 카테고리의 다른 글
무엇을 ' (0) | 2020.06.18 |
---|---|
페이지에서 총 시계 수를 계산하는 방법은 무엇입니까? (0) | 2020.06.18 |
쉘 명령의 소스 코드를 어떻게 읽습니까? (0) | 2020.06.18 |
파일 크기가 구성된 제한 (2560000)을 초과합니다. 코드 통찰력 기능을 사용할 수 없습니다 (0) | 2020.06.18 |
for 루프 중에 목록 항목을 수정하는 방법은 무엇입니까? (0) | 2020.06.18 |