2014-09-08 1 views
0

나는 Torch를 사용하는 응용 프로그램을 만들었습니다. 토치를 켜고 끌 수있는 버튼이 있습니다. 그러나 사용자가 토치를 켠 다음보기에서 멀리 이동하면 토치가 켜져 있습니다. 사용자는보기를 해제하려면 다시 탐색해야합니다. 내가 원하는 것은 사용자가 페이지에서 벗어날 때 자동으로 토치가 꺼지는 것입니다.보기에서 (세그) 떠날 때 토치를 끄는 방법?

Xcode 5.1.1; IOS 7; 주로 여기

아이폰

이 응용 프로그램은 내가 토치에 사용하는 코드입니다 :

#import "ViewController.h" 

@interface ViewController() 

@end 

@implementation ViewController 
@synthesize btnFlash; 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

- (IBAction)btnFlashOnClicked:(id)sender 
{ 
    AVCaptureDevice *flashLight = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; 
    if ([flashLight isTorchAvailable] && [flashLight  isTorchModeSupported:AVCaptureTorchModeOn]) 
    { 
     BOOL success = [flashLight lockForConfiguration:nil]; 
     if (success) 
     { 
      if ([flashLight isTorchActive]) 
      { 
       [btnFlash setTitle:@"Light On" forState:UIControlStateNormal]; 
       [flashLight setTorchMode:AVCaptureTorchModeOff]; 
      } 
      else 
      { 
       [btnFlash setTitle:@"Light Off" forState:UIControlStateNormal]; 
       [flashLight setTorchMode:AVCaptureTorchModeOn]; 
      } 
      [flashLight unlockForConfiguration]; 
     } 
    } 
} 


@end 
+1

당신이보기가 사라질 때 셀렉터라고 알고 있습니까 :

- (void)viewDidDisappear:(BOOL)animated 

단순히보기 컨트롤러에 다음을 붙여? 만약 그렇다면 당신은 당신의 후크를 가지고 있습니다 ... – trojanfoe

+0

'viewWillDisappear :'를보십시오. – rmaddy

+0

좋아요, ViewWillDisappear를 살펴 봤지만 구현 방법이 확실하지 않습니다. 좀 더 구체적인 @ 트로이 호프 일 수 있습니까? 나는 정말로 당신의 도움에 감사드립니다, 나는 멍청한 사이입니다. - – rlab007

답변

1

확인을 켜거나 끄하기 위해 현재의 조명 상태와 방법을 쉽게 쿼리를 허용하는 방법으로 기능을 파괴 :

01 :과

- (AVCaptureDevice *)flashLight 
{ 
    AVCaptureDevice *flashLight = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; 
    if (![flashLight isTorchAvailable] || 
     ![flashLight isTorchModeSupported:AVCaptureTorchModeOn]) { 
     flashLight = nil; 
    } 
    return flashLight; 
} 

- (BOOL)isLightOn 
{ 
    BOOL isOn = NO; 
    AVCaptureDevice *flashLight = [self flashLight]; 
    if ([flashLight lockForConfiguration:nil]) { 
     isOn = [flashLight isTorchActive]; 
     [flashLight unlockForConfiguration]; 
    } 
    return isOn; 
} 

- (void)turnLightOn:(BOOL)on 
{ 
    AVCaptureDevice *flashLight = [self flashLight]; 
    if ([flashLight lockForConfiguration:nil]) { 
     [flashLight setTorchMode:on ? AVCaptureTorchModeOn : AVCaptureTorchModeOff]; 
     [flashLight unlockForConfiguration]; 
    } 
} 

은 쉽게 단순히 액션 메소드에서 조작 할 수에 관계없이 현재 상태를 쉽게 turnLightOn:NO에게 전화를 할 수있을 것입니다

+0

인수가있는'viewWillDisappear :'입니다. –

+0

@robmayoff 물론 맞습니다. 감사. – trojanfoe

0

당신은 방법 안에 횃불을 끌 수 :

- (void)viewDidDisappear:(BOOL)animated{ 

[super viewDidAppear:animated]; 

// your code to turn the torch off goes here 

} 
+0

감사합니다. 솔루션은 잘 작동합니다. ZviBar의 코멘트에서 위의 Trojanfoe의 코멘트에서 "횃불을 끄는 코드"가 나와 있습니다. 이 코드 [self turnLightOn : NO]; 위의 메서드로 인해 작동합니다. 즉,보기를 떠날 때 뭔가를 제어하려는 경우 viewWillDisappear는 제어 할 장치의 코드를 입력하는 한이를 수행합니다. 아래 예에서와 같습니다. 이봐 요, 이걸 잘 설명하지 못할 수도 있습니다, 나는 멍청이입니다. 그러나 이것은 나에게 매우 도움이되었습니다. – rlab007