2012-07-31 3 views
6

저는 카메라 캡처 순간에 화면을 바로 깜박이고 (그리고 나서 페이드 아웃되어) 청각 단서 외에 사진이 찍혔다는 표시를 사용자에게주기를 원합니다.카메라 캡처 순간에 흰색 화면이 깜박입니까?

그런 애니메이션을 어디에 배치해야합니까? 또한 페이드 아웃의 지속 시간을 제어 할 수 있도록 구현하는 방법은 무엇입니까?

참고 : 특정 카메라 선택 도구에 대한 사용자 정의 오버레이를 만들었습니다.

사진이 찍혔다는 것을 나타내는 모든 것이 내가 찾고있는 것입니다.

답변

9

정확히 어떻게 사진을 찍을 지 모르겠으니 (어쩌면 코드를 게시 할 수 있을지 모르겠다), 여기에 흰색을 깜박이게하는 애니메이션 코드가있다 :

//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 초).