弧形/曲线覆盖在海拔/轴承上的 iPhone 相机
Posted
技术标签:
【中文标题】弧形/曲线覆盖在海拔/轴承上的 iPhone 相机【英文标题】:arc/curve overlay at elevation/bearing over iphone camera 【发布时间】:2013-10-29 03:52:32 【问题描述】:伙计们,
我正在寻找关于我应该学习/阅读什么以完成我需要做的事情的指针/方向。我不是在寻找完整的解决方案/答案(当然,除非你已经准备好了:))。
我的问题是我想在相机/视频视图上显示一个叠加层。覆盖由一个 ARC/曲线组成,上面有点。叠加层会在那里,但它只会在用户将设备倾斜到仰角 X(度)和方位 Y 时显示。
在 youtube 上的以下两个视频中可以看到几个示例: http://www.youtube.com/watch?v=lRLpKZMCRHo 在时间 0:15 到 0:50 和 http://www.youtube.com/watch?v=oemvZl151eY 在时间 0:14 到结束 (0:48)
我从未使用过quartz/graphics/spritekit,我什至不知道这些是否有用,因此我不知道从哪里开始……
感谢您的帮助。提前致谢!
【问题讨论】:
【参考方案1】:最简单的方法是使用石英。使用CGContext
绘制函数将您的弧线或曲线绘制到您放置在相机视图上的UIView
中。这可以在UIView
的drawRect:
方法中轻松完成,因为您可以轻松检索特定UIView
的CGContext
。为了更好地解释这一点,这里有一个例子:
//
// PlotView.m
// testApp
//
// Created by Me on 10/20/13.
// Copyright (c) 2013 Me. All rights reserved.
//
#import "PlotView.h"
@implementation PlotView
-(void)drawRect:(CGRect)rect
//The CGContext for this UIView instance
CGContextRef context = UIGraphicsGetCurrentContext();
//Set the draw style
CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor);
//Add elements to draw
CGContextAddArc(context, CGRectGetMidX(rect), CGRectGetMidY(rect), CGRectGetWidth(rect)/2, M_PI_4, 3*M_PI_4, YES);
//commit draw
CGContextDrawPath(context, kCGPathStroke);
//additional parts with different draw setup
CGContextSetLineWidth(context, 5);
CGContextAddEllipseInRect(context, CGRectMake(10, 10, 50, 50));
CGContextDrawPath(context, kCGPathFillStroke);
@end
您可以在这个单一视图中绘制所有内容,并根据设备移动调整其位置。您也可以正常隐藏/显示视图(更改alpha
或hidden
属性)。
要触发更新(例如,当卫星改变位置时)调用setNeedsDisplay
或setNeedsDisplayInRect:
方法。为了优化,如有必要,请在后者中使用rect
参数(以及drawRect
方法中的相同参数)以仅在需要的部分视图上触发重绘(并且也仅在此矩形中绘制)。
关于你需要显示的曲线:我相信你会找到一个合适的CGContextAdd...
函数来绘制你需要绘制的形状,无论是圆弧、一组直线还是贝塞尔曲线。
【讨论】:
Burax,感谢您提供非常详细的答案,这是对我需要进一步研究/研究的内容的一个很好的介绍。现在,我将投票赞成答案,在研究/尝试了您在一周内提到的内容之后,我会回来并将其标记为答案。再次,非常感谢您的介绍!欣赏! burax,对于迟到的评论感到抱歉:我已经离开一段时间了,直到现在才能完全理解/学习您提出的解决方案。我还没有实现它,我有几个问题,如果你能花一点时间来回答,我将不胜感激: 1- 你说“使用 CGContext 绘制函数将你的弧线或曲线绘制到你放在相机上的 UIView 中视图”如果弧/视图将比屏幕尺寸大得多并根据当前设备方位设置它会起作用吗? 2- 卫星并不会真正改变位置(地球静止),因此基于纬度/经度和方位 X 度(也是仰角)的位置,带有卫星点的曲线将始终相同。只有当设备的方位X和仰角改变时,曲线才会移动......(只是说)以上是关于弧形/曲线覆盖在海拔/轴承上的 iPhone 相机的主要内容,如果未能解决你的问题,请参考以下文章
使用动画 UIImageView 作为 iPhone 相机覆盖