정확히 어떻게 사진을 찍을 지 모르겠으니 (어쩌면 코드를 게시 할 수 있을지 모르겠다), 여기에 흰색을 깜박이게하는 애니메이션 코드가있다 :
//Header (.h) file
@property (nonatomic, strong) UIView *whiteScreen;
//Implementation (.m) file
@synthesize whiteScreen;
- (void)viewDidLoad {
self.whiteScreen = [[UIView alloc] initWithFrame:self.view.frame];
self.whiteScreen.layer.opacity = 0.0f;
self.whiteScreen.layer.backgroundColor = [[UIColor whiteColor] CGColor];
[self.view addSubview:self.whiteScreen];
}
-(void)flashScreen {
CAKeyframeAnimation *opacityAnimation = [CAKeyframeAnimation animationWithKeyPath:@"opacity"];
NSArray *animationValues = @[ @0.8f, @0.0f ];
NSArray *animationTimes = @[ @0.3f, @1.0f ];
id timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
NSArray *animationTimingFunctions = @[ timingFunction, timingFunction ];
[opacityAnimation setValues:animationValues];
[opacityAnimation setKeyTimes:animationTimes];
[opacityAnimation setTimingFunctions:animationTimingFunctions];
opacityAnimation.fillMode = kCAFillModeForwards;
opacityAnimation.removedOnCompletion = YES;
opacityAnimation.duration = 0.4;
[self.whiteScreen.layer addAnimation:opacityAnimation forKey:@"animation"];
}
또한 페이드 아웃 지속 시간을 제어하는 방법에 대해 질문했습니다. 배열 animationTimes
의 값을 조정하여이 작업을 수행 할 수 있습니다. CAKeyframeAnimations
의 작동 방식에 익숙하지 않은 경우 여기를 클릭하십시오. 애니메이션의 총 재생 시간은 opacityAnimation.duration = 0.4
에 의해 제어됩니다. 이것은 0.4 초의 애니메이션을 만듭니다. 이제 animationTimes
에 무엇을합니다. 배열의 각 값은 0.0과 1.0 사이의 숫자이며 'animationValues'배열의 요소에 해당합니다. times 배열의 값은 해당 키 프레임 값의 지속 시간을 애니메이션의 총 지속 시간의 일부로 정의합니다.
예를 들어, 위의 애니메이션에서 times 배열에는 값 0.3과 1.0이 포함되어 있으며 값 0.8과 0.0에 해당합니다. 총 시간은 0.4이고, 그래서 0.0 초기 불투명도를 갖는 whiteScreen 뷰 0.8 불투명도 인상
0.4 * 0.3 = 0.12 seconds.
걸리는 것을 의미한다. 두 번째 값인 0.0은 레이어를 다시 투명하게 만듭니다. 이것은 시간의 나머지 부분을 차지합니다 (0.4 - 0.12 = 0.28 초).