在Swift中使用相机的API似乎是一个但不同的,我很难将相机聚焦在一个点上。当用户点击屏幕时,我希望相机聚焦在那个点
下面是我的代码:
func focusCamera(point:CGPoint)
{
var screenRect:CGRect = bounds
var focusX = Float(point.x/screenRect.width)
var focusY = Float(point.y/screenRect.height)
_currentDevice.lockForConfiguration(nil)
_currentDevice.setFocusModeLockedWithLensPosition(focusX)
{
time in
self._currentDevice.unlockForConfiguration()
}
_currentDevice.setFocusModeLockedWithLensPosition(focusY)
{
time in
self._currentDevice.unlockForConfiguration()
}
}
字符串
但似乎行不通。
任何建议都非常欢迎!
7条答案
按热度按时间ma8fv8wu1#
来自@ryantxr的Swift 3的更新答案:
字符串
ygya80vv2#
更好的解决方案,因为它适用于所有
videoGravity
模式,并且在预览层纵横比与设备比率不同时也能正常工作:字符串
sr4lhrrt3#
更新了@Code for Swift 2的答案。
字符串
euoag5mw4#
Swift 2.0
字符串
6pp0gazn5#
我使用
AVFoundation
库和一个 Package 器,相机管理器。我分享到代码示例。你可以调整你的项目。顺便说一句,你不能用前置摄像头对焦相机。它不支持它。您只能调整前置摄像头的曝光。用稀有相机,你可以做到。字符串
nzk0hqpo6#
结果很简单:
字符串
b1uwtaje7#
这个问题可能是iOS点击焦点的重复,在那里我发布了这个(希望是明确的)对我有效的解决方案:
使用
videoView: UIView
显示视频,以及cameraDevice: AVCaptureDevice
,以下内容似乎对我有用:字符串
请注意,我必须交换
x
和y
坐标,并将x
坐标从1重新Map到0而不是0到1 -不知道为什么会这样,但似乎有必要让它正确工作(尽管测试它也有点棘手)。