我有这个练习项目,允许用户用手指触摸屏幕.我做的非常简单的App作为锻炼方式回来了.我的小表弟冒昧地用我的iPad用手指在这个应用程序上绘制东西(儿童画:圆圈,线条等等,无论他想到什么).然后他开始绘制圆圈,然后他让我把它变成"好圆圈"(根据我的理解:将绘制的圆圈完美地圆形,因为我们知道无论我们用手指在屏幕上画出一些东西有多稳定,圆圈永远不会像圆圈那样圆润.)
所以我的问题是,在代码中是否有任何方法我们可以首先检测用户绘制的线条,形成一个圆圈,并通过使其在屏幕上完美圆形来生成大致相同大小的圆圈.做一个不那么直线的东西我会知道怎么做,但至于圆圈,我不知道如何用石英或其他方法去做.
我的理由是,在用户抬起手指以证明他正试图实际绘制圆圈之后,线的起点和终点必须相互接触或交叉.
cocoa-touch core-graphics quartz-graphics ios shape-recognition
我想基于UIColor动态创建1x1 UIImage.
我怀疑这可以通过Quartz2d快速完成,而我正在仔细研究文档,试图掌握基础知识.但是,看起来存在很多潜在的缺陷:没有正确识别每个事物的位数和字节数,没有指定正确的标志,没有释放未使用的数据等.
如何使用Quartz 2d(或其他更简单的方法)安全地完成这项工作?
我正在使用CGEventCreateKeyboardEvent并需要知道CGKeyCode要使用的值.
具体来说,我是关键的密钥代码Command.文档提供了其他键的示例:zis 6,shiftis 56.
某处必须有Mac虚拟键码列表?
我想知道是否有人可以准确区分这些?据我所知,Core Graphics只是一个包含Quartz Core和Quartz 2D的"Framework Package".但我不确定Quartz 2D是否真的是Quartz Core?也许有人可以在那里画一些线?是什么构成了这些之间的差异?
在查看文档时,我看到Quartz Core仅列出了所有Core Animation的内容.那么Quartz Core ==核心动画?
我需要为圆角矩形绘制轮廓.我知道我可以制作线条和弧线,但也许还有一个圆形的功能?
我们正在为OS X创建一个使用Quartz Events移动光标的用户空间设备驱动程序,当游戏 - 特别是那些以窗口模式运行的游戏 - 无法正确捕获鼠标指针时,我们遇到了一个问题(=包含/将其保持在窗口的边界内).例如,它将移出游戏窗口并单击桌面或附近的非活动应用程序.
如果我们只能检测到活动应用程序何时调用CGAssociateMouseAndMouseCursorPosition,我们就可以解决这个问题.
你会怎么做?任何想法都表示赞赏.
我正在开发iPhone上的草图应用程序.我得到了它的工作,但不是在这里看到的漂亮

我正在寻找任何平滑绘图的建议基本上,我所做的是当用户将手指放在我调用的屏幕上时
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
Run Code Online (Sandbox Code Playgroud)
然后我收集一个阵列中的单个触摸
- (void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
Run Code Online (Sandbox Code Playgroud)
当用户从屏幕上拿出一根手指时,我打了个电话
- (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
Run Code Online (Sandbox Code Playgroud)
然后我用数字绘制数组中的所有点
NSMutableArray *points = [collectedArray points];
CGPoint firstPoint;
[[points objectAtIndex:0] getValue:&firstPoint];
CGContextMoveToPoint(context, firstPoint.x, firstPoint.y);
CGContextSetLineCap(context, kCGLineCapRound);
CGContextSetLineJoin(context, kCGLineJoinRound);
for (int i=1; i < [points count]; i++) {
NSValue *value = [points objectAtIndex:i];
CGPoint point;
[value getValue:&point];
CGContextAddLineToPoint(context, point.x, point.y);
}
CGContextStrokePath(context);
UIGraphicsPushContext(context);
Run Code Online (Sandbox Code Playgroud)
而现在我想改进绘图更像是"Sketch Book"App

我认为与信号处理算法有关,要重新排列阵列中的所有点,但我不确定.任何帮助将非常感激.
提前谢谢:)
我花了一整天时间尝试从我的iPad应用程序中获取PDF中的超链接元数据.CGPDF*API是一个真正的噩梦,我在网上发现的关于这一切的唯一信息是我必须寻找一个"Annots"字典,但我在我的PDF中找不到它.
我甚至使用旧的Voyeur Xcode样本来检查我的测试PDF文件,但没有这个"Annots"字典的痕迹......
要知道,这是一个功能,我在每一个PDF阅读器看-这个同样的问题已经被 问 多 时间在这里没有真正的实际的答案.我通常不会直接询问示例代码,但显然这次我真的需要它...任何人都有这个工作,可能有示例代码?
更新:我刚刚意识到已经完成我的测试PDF的人刚刚插入了一个URL作为文本,而不是一个真正的注释.他尝试使用注释,我的代码现在正常工作......但这不是我需要的,所以我似乎必须分析文本并搜索URL.但那是另一个故事......
更新2:所以我终于提出了一些有效的代码.我在这里张贴它,所以希望它能帮助别人.它假定PDF文档实际上包含注释.
for(int i=0; i<pageCount; i++) {
CGPDFPageRef page = CGPDFDocumentGetPage(doc, i+1);
CGPDFDictionaryRef pageDictionary = CGPDFPageGetDictionary(page);
CGPDFArrayRef outputArray;
if(!CGPDFDictionaryGetArray(pageDictionary, "Annots", &outputArray)) {
return;
}
int arrayCount = CGPDFArrayGetCount( outputArray );
if(!arrayCount) {
continue;
}
for( int j = 0; j < arrayCount; ++j ) {
CGPDFObjectRef aDictObj;
if(!CGPDFArrayGetObject(outputArray, j, &aDictObj)) {
return;
}
CGPDFDictionaryRef annotDict;
if(!CGPDFObjectGetValue(aDictObj, kCGPDFObjectTypeDictionary, &annotDict)) {
return;
}
CGPDFDictionaryRef aDict;
if(!CGPDFDictionaryGetDictionary(annotDict, "A", &aDict)) { …Run Code Online (Sandbox Code Playgroud) 对于我正在构建的应用程序,我绘制了2个圆圈.一个比另一个大一点.我想在这些行之间弯曲文本,以便建立一个圆形菜单.
我阅读了关于弯曲文本的大部分内容,你必须将文本分成字符,然后用正确的角度绘制每个字符(通过旋转你正在绘制的上下文).
我无法绕过如何为我的角色获得正确的角度和位置.
我在屏幕截图中列出了目前菜单的样子.只有我添加的文本是从UIImageView中的图像加载的.

我希望有人可以在某些方面为我提供一些关于如何在白色圆圈中绘制文字的起点.
编辑:好的,我目前正在这一点上:

我通过使用以下代码完成:
- (UIImage*) createMenuRingWithFrame:(CGRect)frame
{
CGRect imageSize = CGRectMake(0,0,300,300);
float perSectionDegrees = 360 / [sections count];
float totalRotation = 90;
char* fontName = (char*)[self.menuItemsFont.fontName cStringUsingEncoding:NSASCIIStringEncoding];
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(NULL, imageSize.size.width, imageSize.size.height, 8, 4 * imageSize.size.width, colorSpace, kCGImageAlphaPremultipliedFirst);
CGContextSetTextMatrix(context, CGAffineTransformIdentity);
CGContextSelectFont(context, fontName, 18, kCGEncodingMacRoman);
CGContextSetRGBFillColor(context, 0, 0, 0, 1);
CGPoint centerPoint = CGPointMake(imageSize.size.width / 2, imageSize.size.height / 2);
double radius = (frame.size.width / 2);
CGContextStrokeEllipseInRect(context, CGRectMake(centerPoint.x - (frame.size.width / 2), centerPoint.y …Run Code Online (Sandbox Code Playgroud) 我们偶然发现了Quartz Events的性能问题,更具体地说是CGEventPost:在繁重的GPU加载期间,CGEventPost会阻塞.我们已经创建了一个小型基准测试应用程序来演示该问题.此应用程序只是一个创建,发布和发布事件的循环.
您可以在下面看到运行该应用程序的结果.第一次运行是在空闲系统上.第二次运行是使用FurMark(GPU压力测试),表盘尽可能地加速.
18:58:01.683 EventPerformance[4946:707] Measurements: (outer should be close to 10)
18:58:01.684 EventPerformance[4946:707] inner (ms): 0.04, outer (ms): 11.02, CGEventPost (ms): 0.03
18:58:01.684 EventPerformance[4946:707] inner (ms): 0.04, outer (ms): 11.02, CGEventPost (ms): 0.03
18:58:01.685 EventPerformance[4946:707] inner (ms): 0.07, outer (ms): 10.26, CGEventPost (ms): 0.03
18:58:01.685 EventPerformance[4946:707] inner (ms): 0.06, outer (ms): 10.85, CGEventPost (ms): 0.05
18:58:01.686 EventPerformance[4946:707] inner (ms): 0.07, outer (ms): 10.41, CGEventPost (ms): 0.04
18:58:01.686 EventPerformance[4946:707] inner (ms): 0.04, outer …Run Code Online (Sandbox Code Playgroud) quartz-graphics ×10
iphone ×5
ios ×3
macos ×3
cocoa-touch ×2
mouseevent ×2
quartz-2d ×2
cgkeycode ×1
drawing ×1
ipad ×1
keyboard ×1
keycode ×1
math ×1
pdf ×1
uiimage ×1