2013-05-09 46 views
0

我正在编写一个应用,该应用具有用于使用相机拍摄照片的自定义视图,类似于Apple的AVCam。其中,每次切换相机时,我都想让按钮消失并重新出现在闪光灯图标上。 IE使用前置摄像头时,闪光灯按钮不应存在,使用背面时应该!检查iOS中当前正在使用哪个相机应用

我给这家目前的代码是:

AVCaptureDevicePosition position = [[videoInput device] position]; 

    if (position == AVCaptureDevicePositionBack) { 
    self.flashButton.hidden == YES; 
} 

但它在videoInput的错误出现,我不知道为什么...任何文档,你可以指点我或想法我的代码中的更改将非常感谢!

编辑

基本上只是具体为什么它拿出这个代码“使用未声明的标识符的”错误:

回答

1

下面的代码可以帮助你:

AVCaptureDeviceInput *newVideoInput; 
AVCaptureDevicePosition currentCameraPosition = [[videoInput device] position]; 

if (currentCameraPosition == AVCaptureDevicePositionBack) 
{ 
    currentCameraPosition = AVCaptureDevicePositionFront; 
} 
else 
{ 
    currentCameraPosition = AVCaptureDevicePositionBack; 
} 

AVCaptureDevice *backFacingCamera = nil; 
NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo]; 
for (AVCaptureDevice *device in devices) 
{ 
    if ([device position] == currentCameraPosition) 
    { 
     backFacingCamera = device; 
    } 
} 
newVideoInput = [[AVCaptureDeviceInput alloc] initWithDevice:backFacingCamera error:&error]; 
+0

感谢您的帮助,但我在AVCam应用程序中看到了这一点。我不知道如何在伪代码中编写一小段代码,例如:if current camera = back camera {show button} else {hide button} – falky 2013-05-09 11:43:54

+0

每次使用[videoInput device]时都会出现错误。所以我想知道是否有任何想法或任何其他方式来确定我的UIView使用哪个相机('AVCaptureDevicePositionBack'或'AVCaptureDevicePositionFront')。从那里我会隐藏或显示flashButton ...?尽管感谢您的帮助。我的想法是这样的:'AVCaptureDevicePosition currentCameraPosition = [[videoInput device] position]; if([currentCameraPosition isEqual:AVCaptureDevicePositionBack]){self.flashButton.hidden = NO;} else {self.flashButton.hidden = YES; }” – falky 2013-05-09 12:12:16

0

我一直在寻找类似的问题的解决方案,并提出了这个问题,它可能适合你(仅在iOS8测试并写入SWIFT):

var captureDevice : AVCaptureDevice? 

... 

var currentDevice:String = captureDevice?.localizedName as String! 

if currentDevice.rangeOfString("Back Camera") != nil { 
    //hide flash icon 
} else if currentDevice.rangeOfString("Front Camera") != nil { 
    //show flash icon 
} 

此代码假定你已经设置相机正确

注:这可能不是最好的办法,因为如果苹果决定改变localizedName这将打破。而且,我知道这个问题很古老,但它可能会帮助其他人绊倒它

相关问题