1

그래서 커스텀 UIButton을 만들어 코드에 추가하고 interfacebuiler에서 연결을 만들었습니다. 버튼을 켜기/끄기 스위치로 사용하려면 어떻게해야합니까? 저는 아이폰 개발의 초보자입니다.이 수업은 여름에 다음 학기에 시작하기 위해 취하는 수업입니다.버튼을 만들어 응용 프로그램을 시작하십시오.

아무도 내가 올바른 방법으로이를 수행하는 방법을 이해하고 코드에 주석을 쓸 수 있도록 도울 수 있다면. 모든 도움에 감사드립니다. 여기

// 
// FlashlightViewController.h 
// 

#import <UIKit/UIKit.h> 
#import <AVFoundation/AVFoundation.h> 

@interface FlashlightViewController : UIViewController { 

    AVCaptureSession *torchSession; 
    IBOutlet UIButton *button; 
} 

-(IBAction)pressButton:(id) sender; 

@property (nonatomic, retain) AVCaptureSession *torchSession; 
@property (nonatomic, retain) IBOutlet UIButton *button; 

@end 

하는 .m 파일

// 
// FlashlightViewController.m 
// 

#import "FlashlightViewController.h" 

@implementation FlashlightViewController 
@synthesize torchSession; 
@synthesize button; 


- (void)viewDidLoad { 

    AVCaptureSession *session = [[AVCaptureSession alloc] init]; 

    [session beginConfiguration]; 

    AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; 

    if ([device hasTorch] && [device hasFlash]){ 
     [device lockForConfiguration:nil]; 
     [device setTorchMode:AVCaptureTorchModeOn]; 
     [device setFlashMode:AVCaptureFlashModeOn]; 
     [device unlockForConfiguration]; 

     AVCaptureDeviceInput *flashInput = [AVCaptureDeviceInput deviceInputWithDevice:device error: nil]; 
     if (flashInput){ 
      [session addInput:flashInput]; 
     } 

     AVCaptureVideoDataOutput *output = [[AVCaptureVideoDataOutput alloc] init]; 
     [session addOutput:output]; 
     [output release]; 
     [session commitConfiguration]; 

     [session startRunning]; 
    } 

    [self setTorchSession:session]; 
    [session release]; 

    [super viewDidLoad]; 
} 
- (void)viewDidUnload { 
    self.button = nil; 
} 

- (void)dealloc { 
    [TorchSession release]; 
    [button release]; 
    [super dealloc]; 
} 
-(IBAction)pressButton : (id) sender{ 

} 
@end 
+0

나중에 참조 할 수 있도록 내 대답을 참조하십시오. http://stackoverflow.com/questions/3190034/turn-on-torch-flash-on-iphone-4/3367424#3367424 – iwasrobbed

답변

1

@interface 섹션 (.h)에는 IBOutlet IBAction pressButton;도 필요합니다. 그런 다음 Interface Builder의 속성 (outlet 섹션)에서 File 's Owner를 선택하고 pressButton:을 UIButton의 Touch Up Inside 액션에 연결하십시오.

토치 상태를 토글하려면 을 @interface 섹션 (.h)에 추가하십시오. 그런 다음 viewDidLoad 사용자 지정 코드를 pressButton 메서드로 이동합니다. 그런 다음, pressButton 방법의 끝에 추가 :

if (torchAlreadyOn) { 
    torchAlreadyOn = NO; 
} 
else { 
    torchAlreadyOn = YES; 
} 

을 그리고, 사방이에에 토치 상태를 설정 한 경우 ... else 문 묶 경우 확인되는 BOOL :

AVCaptureSession *session = [[AVCaptureSession alloc] init]; 

[session beginConfiguration]; 

AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; 

if ([device hasTorch] && [device hasFlash]){ 
    [device lockForConfiguration:nil]; 

    if (torchAlreadyOn) { 
     [device setTorchMode:AVCaptureTorchModeOn]; 
     [device setFlashMode:AVCaptureFlashModeOn]; 
    } 
    else { 
     [device setTorchMode:AVCaptureTorchModeOff]; 
     [device setFlashMode:AVCaptureFlashModeOff]; 
    } 
    [device unlockForConfiguration]; 

    AVCaptureDeviceInput *flashInput = [AVCaptureDeviceInput deviceInputWithDevice:device error: nil]; 
    if (flashInput){ 
     if (!torchAlreadyOn) { 
      [session addInput:flashInput]; 
     } 
     else { 
      [session removeInput:flashInput]; 
     } 
    } 

    AVCaptureVideoDataOutput *output = [[AVCaptureVideoDataOutput alloc] init]; 
    if (!torchAlreadyOn) { 
     [session addOutput:output]; 
    } 
    else { 
     [session removeOutput:output]; 
    } 
    [output release]; 
    [session commitConfiguration]; 

    [session startRunning]; 
} 

[self setTorchSession:session]; 
[session release]; 
+0

jrtc27, 어쨌든 열을 제어 할 수 있습니까? 플래시가 켜져 있습니까? 장치는 정말로 뜨겁게된다! !! 아니면 그냥 그들이 그렇게하는 것입니까? –

+0

슬프게도 LED가 켜지거나 꺼져 있기 때문에 열이 제어 불능 상태입니다. – jrtc27

+1

그냥 fyi .. 그냥이 스 니펫을 시도하고 그것을 해제 할 때 애플 리케이션을 동결 것으로 보인다. – iwasrobbed

1

문제가 실제로 무엇이다 : 데이비드 H.

여기 내 코드입니까? UISwitch 개체가 내장되어 있습니다. 커스텀 버튼을 만들고 싶다면, 버튼 핸들러에서 bool 플래그를 추적하여 토글 할 수 있습니다.