0

伙计们,

我正在寻找关于我应该学习/阅读什么以完成我需要做的事情的指针/方向。我不是在寻找一个完整的解决方案/答案(除非你当然准备好了:))。

我的问题是我想在相机/视频视图上显示一个叠加层。覆盖由一个 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,我什至不知道这些是否有用,因此我不知道从哪里开始......

感谢您的帮助。提前致谢!

4

1 回答 1

1

最简单的方法是使用石英。CGContext使用绘图功能将您的弧线或曲线绘制到UIView您放置在相机视图上的 a 中。这在UIView'sdrawRect:方法中很容易完成,因为您可以轻松检索CGContext特定UIView. 为了更好地解释这一点,这里有一个例子:

//
//  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

您可以在这个单一视图中绘制所有内容,并根据设备移动调整其位置。您也可以正常隐藏/显示视图(更改alphahidden属性)。要触发更新(例如当卫星改变位置时),请调用setNeedsDisplayorsetNeedsDisplayInRect:方法。为了优化,如有必要,请使用rect后者中的参数(以及drawRect方法中的相同参数)以仅在需要的部分视图上触发重绘(并且也仅在此矩形中绘制)。

关于你需要显示的曲线:我相信你会找到一个适合CGContextAdd...你需要绘制的形状的函数,无论是圆弧、一组直线还是贝塞尔曲线。

于 2013-10-20T21:27:44.340 回答