AVFoundation 点击​​聚焦反馈矩形

2024-03-28

我正在开发一个 iPhone 应用程序,我直接使用 AVFoundation 通过相机捕获视频。

我已经实现了一项功能来启用tap to focus为用户提供的功能。

- (void) focus:(CGPoint) aPoint;
{
#if HAS_AVFF
    Class captureDeviceClass = NSClassFromString(@"AVCaptureDevice");
    if (captureDeviceClass != nil) {        
        AVCaptureDevice *device = [captureDeviceClass defaultDeviceWithMediaType:AVMediaTypeVideo];
        if([device isFocusPointOfInterestSupported] &&
           [device isFocusModeSupported:AVCaptureFocusModeAutoFocus]) {
            CGRect screenRect = [[UIScreen mainScreen] bounds];
            double screenWidth = screenRect.size.width;
            double screenHeight = screenRect.size.height;
            double focus_x = aPoint.x/screenWidth;
            double focus_y = aPoint.y/screenHeight;
            if([device lockForConfiguration:nil]) {
                [device setFocusPointOfInterest:CGPointMake(focus_x,focus_y)];
                [device setFocusMode:AVCaptureFocusModeAutoFocus];
                if ([device isExposureModeSupported:AVCaptureExposureModeAutoExpose]){
                    [device setExposureMode:AVCaptureExposureModeAutoExpose];
                }
                [device unlockForConfiguration];
            }
        }
    }
#endif
}

到目前为止一切顺利,但我缺少像照片应用程序中那样的反馈矩形。有什么方法可以告诉 AVFoundation 框架显示此反馈矩形,还是我必须自己实现此功能?


这就是我所做的: 这个类创建当用户点击相机覆盖层时显示的正方形。

CameraFocusSquare.h

#import <UIKit/UIKit.h>
@interface CameraFocusSquare : UIView
@end


CameraFocusSquare.m

#import "CameraFocusSquare.h"
#import <QuartzCore/QuartzCore.h>

const float squareLength = 80.0f;
@implementation FBKCameraFocusSquare

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code

        [self setBackgroundColor:[UIColor clearColor]];
        [self.layer setBorderWidth:2.0];
        [self.layer setCornerRadius:4.0];
        [self.layer setBorderColor:[UIColor whiteColor].CGColor];

        CABasicAnimation* selectionAnimation = [CABasicAnimation
                                                animationWithKeyPath:@"borderColor"];
        selectionAnimation.toValue = (id)[UIColor blueColor].CGColor;
        selectionAnimation.repeatCount = 8;
        [self.layer addAnimation:selectionAnimation
                          forKey:@"selectionAnimation"];

    }
    return self;
}
@end

在您收到点按的视图中,执行以下操作:

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [[event allTouches] anyObject];
    CGPoint touchPoint = [touch locationInView:touch.view];
    [self focus:touchPoint];

    if (camFocus)
    {
        [camFocus removeFromSuperview];
    }
    if ([[touch view] isKindOfClass:[FBKVideoRecorderView class]])
    {
        camFocus = [[CameraFocusSquare alloc]initWithFrame:CGRectMake(touchPoint.x-40, touchPoint.y-40, 80, 80)];
        [camFocus setBackgroundColor:[UIColor clearColor]];
        [self addSubview:camFocus];
        [camFocus setNeedsDisplay];

        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationDuration:1.5];
        [camFocus setAlpha:0.0];
        [UIView commitAnimations];
    }
}

- (void) focus:(CGPoint) aPoint;
{
    Class captureDeviceClass = NSClassFromString(@"AVCaptureDevice");
    if (captureDeviceClass != nil) {
        AVCaptureDevice *device = [captureDeviceClass defaultDeviceWithMediaType:AVMediaTypeVideo];
        if([device isFocusPointOfInterestSupported] &&
           [device isFocusModeSupported:AVCaptureFocusModeAutoFocus]) {
            CGRect screenRect = [[UIScreen mainScreen] bounds];
            double screenWidth = screenRect.size.width;
            double screenHeight = screenRect.size.height;
            double focus_x = aPoint.x/screenWidth;
            double focus_y = aPoint.y/screenHeight;
            if([device lockForConfiguration:nil]) {
                [device setFocusPointOfInterest:CGPointMake(focus_x,focus_y)];
                [device setFocusMode:AVCaptureFocusModeAutoFocus];
                if ([device isExposureModeSupported:AVCaptureExposureModeAutoExpose]){
                    [device setExposureMode:AVCaptureExposureModeAutoExpose];
                }
                [device unlockForConfiguration];
            }
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AVFoundation 点击​​聚焦反馈矩形 的相关文章

  • 强制向扬声器发出音频警报

    我有一个小应用程序 在此应用程序中 扬声器每隔我设置的特定时间就会发出噪音 现在 我希望即使设备中插入了耳机插孔 它也能通过内置扬声器发出噪音 我怎样才能做到这一点 您可以尝试以下代码在扬声器上播放代码 另请检查this http uiha
  • 检查 UITableViewCell 是否完全可见

    如何检查 UITableViewCell 在屏幕上是否完全可见 不被选项卡或导航栏切断 我可以使用以下代码获取可见单元格 NSArray indexes tableView indexPathsForVisibleRows 但我想排除屏幕中
  • JavascriptCore:在 JSExport 中将 javascript 函数作为参数传递

    JavascriptCore是iOS7中支持的新框架 我们可以使用 JSExport 协议将 objc 类的部分内容公开给 JavaScript 在javascript中 我尝试将函数作为参数传递 像这样 function getJsonC
  • 如何在 iPad 上使用 HTML5/Javascript 合成音频

    有没有人有工作示例代码 可以在 iPad 上的 Mobile Safari 上使用 HTML5 Javascript 合成 并播放 音频 我在网上找到了一些基于 javascript 的声音合成示例 但它们似乎都只能在 Firefox 中使
  • 如何使用 PKAddPassButton 创建“添加到苹果钱包”按钮以进行本地化通行证

    在我的 iOS 项目中 我有一个屏幕 允许用户创建苹果通行证并将其添加到钱包中 Apple 建议使用 PKAddPassButton 创建 添加到苹果钱包 按钮 当我尝试使用以下代码创建苹果通行证时 let passButton PKAdd
  • 快速布尔运算

    这实在令人困惑 有人有什么想法吗 let viewHasMovedToRight false initially I want this to be false then func moveViewToRight sender UIButt
  • 从 iPhone 设备查找当前国家/地区

    我必须在 iPhone 设置中获取当前国家 地区 谁能告诉我如何在 iPhone 应用程序中获取当前国家 地区 我必须使用当前国家 地区来解析需要传递当前国家 地区的 RSS 提要 请帮我找到那个国家 提前致谢 要查找用户选择的语言所在的国
  • ios:如何使用 CGPath 模糊图像?

    我创建了一个 CGPath 区域 如绿色圆圈所示 CGPath区域需要清晰 图像的其余部分将应用模糊或半透明效果 我可以使用以下代码在CGPath内剪切图像 UIGraphicsBeginImageContext view frame si
  • iPhone OpenGL ES 单视图还是多视图?

    我很困惑为 iPhone 编写游戏时最好的方法是什么 游戏将使用 OpenGL 渲染 但我很好奇创建开始屏幕 菜单 高分页面等 您是否使用 OpenGL 完成所有这些操作 或者创建额外的 UIView 并使用 UIKit 我认为没有最好的方
  • 无法在 iOS UIWebView 中加载完整的 Facebook 评论插件

    我有一个简单的ViewController在 UIWebView 中加载 FB 评论插件 implementation ViewController void viewDidLoad super viewDidLoad UIWebView
  • iPhone表情插入MySQL却变成空值

    我们正在开发一个 iPhone 应用程序 它将表情符号从 iPhone 发送到服务器端 PHP 并插入到 MySQL 表中 我正在做服务器端的工作 但是insert语句执行成功后 插入的值变成空了 我可以正确插入字段 varchar 的是文
  • 适用于 iPhone 和 HTTP 直播的实时视频聊天

    所以一般来说 我想为 iPhone 制作一个具有视频聊天功能的应用程序 但经过多次搜索 我仍然找不到任何成功的结果 是否有任何公共或私有 API 可用于在 iPhone 上执行此操作 如果您的答案是 是 请帮助我 基本上 我想要的是读取连接
  • iPhone SDK:拖动 UIImageView 时出现问题

    我正在尝试在我的应用程序中拖动 iPhone 屏幕上的 UIImageView 目前我设置的拖动功能很好 拖动图像确实会在屏幕上移动它 问题是你不必拖动图像视图来移动它 你也可以拖动屏幕上的任何地方 它会移动图像 我是这个平台的新手 所以我
  • 由于没有系统应用程序而终止

    这个错误让我发疯 我有一个按钮 我想移动到视图控制器 如果我将其设置为初始视图控制器 我可以打开该视图控制器 但现在我通过单击按钮来调用它 视图控制器包含一个自定义视图 我在绘制矩形上放置了一个断点 当绘制矩形完成时 模拟器终止 我在屏幕上
  • 如何让应用更新以吸引人的屏幕形式提供给用户? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我最近在使用 Make My Trip 应用程序 我发现每当我启动应用程序时都会出现一个非常有吸引力的应用程序更新弹出屏幕 它说要更新应用程
  • Swift Firebase - 如何在使用 queryOrdered(byChild: ).queryEqual(toValue: ) 时获取所有 k/v

    root reviews postABC postId reviewXYZ I want everything under this reviewUID buyerUID 01010 text fast shipping responseT
  • 在集合视图单元格中播放视频,就像在 Facebook 应用程序时间轴中播放的视频一样

    我想在集合视图单元格中播放视频 要求就像 Instagram 时间线 播放视频就像在 facebook 时间线中播放视频 为此 我使用了 UICollectionViewCell 我有一些图像 没有视频 现在我是来自画廊的图像 我正在使用相
  • 自定义 OpenVPN iOS 客户端 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在开发一个自定义 iOS OpenVPN 客户端 我找到了这个原生 OpenVPN 客户端核心源码https staging op
  • ios Facebook 添加 FBNativeAdView 作为子视图

    我想使用预建视图FBNativeAdView 不想自定义 FBNative 广告 如link https developers facebook com docs reference ios current class FBNativeAd
  • 从基元创建自定义形状

    我正在尝试通过组合原始形状来创建自定义物理形状 目标是创建一个圆形立方体 合适的方法似乎是初始化 形状 变换 我在这里找到的https developer apple com library prerelease ios documenta

随机推荐

  • 用于匹配带有尾随空格的字符串的正则表达式在 Perl 中有效,但在 Python 中无效

    我试图找到具有尾随空格的字符串 即 foo 而不是 foo 在 Perl 中 我会使用 str foo print Match n if str s 当我在 Python 2 6 中尝试这个时 例如 import re str foo if
  • 更改路径颜色而不更改以前的路径

    我想创建一个小型绘画应用程序 我可以在其中使用一些颜色进行绘制 但我只测试了一种颜色更改 直到现在它无法正常工作 当我单击按钮并开始使用新颜色进行绘图时 我之前所做的所有绘图也会更改颜色 有人能帮我吗 public class MyTouc
  • 如何通过 $_GET 接受 URL 中的哈希标记?

    据我所知 井号 不会发送到服务器 因此我似乎无法使用原始 PHP 来解析数据 如下面的 URL 所示 index php name Ben address 101 S 10th St Suite 301 我希望使用 GET 数据预先填充表单
  • 我可以使用自回归建模进行信号去噪吗?

    如下 我的任务是使用 AR 建模来消除噪声信号中的伪影 假设我有原始数据中的心电图或肌电图 在 IEEE 上 我发现这可以通过小波变换 巴特沃斯滤波器或经验模式分解来实现 https www kaggle com residentmario
  • 如何从 json 对象初始化结构

    嗨 我是个新手 无法迅速提出任何想法 如何从 json 对象初始化结构 我不知道我该怎么做 用户 名称 cruskuaka 电子邮件 电子邮件受保护 cdn cgi l email protection 电话号码 018833455 地址
  • 将月份从名称转换为数字

    有没有简单的方法可以改变 month July 以便 nmonth 7 07也会好的 我可以做一个 case 语句 但肯定已经有一个要转换的函数了 编辑 我希望我能接受多个答案 因为你们两个基本上通过你们的力量组合给了我我所需要的东西 nm
  • 我可以在oracle中创建参数化视图吗

    我有一个这样的查询 SELECT ID REF ID BATCHNO FROM reporttbl where POSTING DT gt 06 01 2020 and POSTING DT lt 06 30 2020 我每个月都需要它 所
  • 为什么 Android 的 HttpUrlConnection 不支持 HTTP/2?

    我刚刚发现Android推荐的http客户端HttpUrlConnection不支持 HTTP 2 是否有特定原因不在 Android 上使用 HTTP 2 如果你想利用 HTTP 2 你可以使用 OkHttp https github c
  • SQL 一对多匹配多侧中的一侧 by ALL

    在下面的一对多中 CREATE TABLE source id int name varchar 10 PRIMARY KEY id CREATE TABLE params id int source int value int 其中 pa
  • 对数据进行分组并绘制多条线

    我想在 R 中为此数据集绘制多条线 x Year y Value School ID Year Value A 1998 5 B 1998 10 C 1999 15 A 2000 7 B 2005 15 每个学校都有不同年份的数据 我希望每
  • 设置输入占位符的样式,我该怎么做? [复制]

    这个问题在这里已经有答案了 可能的重复 使用 CSS 更改输入的 HTML5 占位符颜色 https stackoverflow com questions 2610497 change an inputs html5 placeholde
  • 如何将 argv[] 获取为 int?

    我有一段这样的代码 int main int argc char argv printf d t int argv 1 printf s t int argv 1 在外壳中我这样做 test 7 但第一个 printf 结果不是 7 我怎样
  • fscanf 无法正确读取浮点数

    这是一个家庭作业问题 我在使用 fscanf 从文本文件读取浮点值时遇到问题 基本上我试图从文件中读取浮点值并将它们存储在动态数组中 输入文件每行有两个浮点数 所以一行可能是 0 85 7 34 不带引号 所以我尝试使用 fscanf fp
  • 如何使用flask-ReSTplus记录帖子正文?

    如何记录预期发布的输入正文value字段出现以便用户知道要发布什么 目前使用以下数据 customer id service id customer name site name service type 我们可以使用上面的 json 来默
  • 将同步代码包装为异步任务的最佳方法是什么?

    我正在实现一个异步接口方法 返回任务 然而 我的实现必然是同步的 最好的方法是什么 有一些内置的方法可以做到这一点吗 以下是我正在考虑的几个选项 选项 1 Task FromResult return Task FromResult Com
  • 如何轮询目录以检查是否添加了新文件?

    我想轮询一个目录以检查是否有新文件添加到该目录中 如果添加了任何新文件 我想读取该文件 有人可以告诉我如何做到这一点吗 Java 7 有一个文件观察器API http java dzone com news how watch file s
  • 将 datetimeoffset 数据类型与 jTDS 结合使用

    jTDS 目前不支持datetimeoffsetSQL Server 2008 中引入的数据类型 任何人都可以建议是否有办法使用datetimeoffset使用 jTDS 键入 正如在 下层客户端的向后兼容性 部分中提到的日期时间偏移文档
  • Protobuf.net“一旦生成序列化器,就无法更改类型”

    我有一些使用 Protobuf net 的相当简单的代码 它抛出了一个非常奇怪的异常 在 MetaType cs 的第 167 行中 它抛出 InvalidOperationException 一旦生成序列化程序 就无法更改类型 这是什么意
  • 单击按钮时切换弹出模式

    我在页面上显示包含多个项目的弹出窗口时遇到问题 本质上 它是页面下方项目的垂直 列表 到目前为止我有两个 当我单击第一个项目时 第一组信息会正确显示 但是当我单击第二个项目时 它会在弹出窗口中显示第一组信息 任何帮助表示赞赏 谢谢 docu
  • AVFoundation 点击​​聚焦反馈矩形

    我正在开发一个 iPhone 应用程序 我直接使用 AVFoundation 通过相机捕获视频 我已经实现了一项功能来启用tap to focus为用户提供的功能 void focus CGPoint aPoint if HAS AVFF