我正在Cocoa中编写一个带有各种缩放选项的音频波形编辑器.在最宽的时候,它显示了整首歌曲的波形(视野中约1000万个样本).在最窄处,它显示了声波的像素精确表示(视图中约1千个样本).我希望能够在这些缩放级别之间平滑过渡.像Ableton Live这样的商业编辑似乎以非常便宜的方式做到这一点.
我当前的实现满足我想要的缩放范围,但效率低且不连贯.该设计很大程度上受到这篇关于使用石英绘制波形的优秀文章的启发
http://supermegaultragroovy.com/blog/2009/10/06/drawing-waveforms/
我为各种缩小级别的音频文件创建了多个CGMutablePathRef.当我完全缩小时,我使用的路径已经减少到每x千个样本一个点.当我一直放大时,我会使用包含每个样本点的路径.当我处于缩小级别之间时,我会水平缩放路径.这使它具有功能性,但仍然非常昂贵,并且在减少级别之间转换时会出现伪像.
关于我如何降低成本的一个想法是取消抗锯齿.我的编辑器中的波形是消除锯齿的,而Ableton中的波形则没有(参见下面的比较).
我没有看到关闭CGMutablePathRef的抗锯齿的方法.在Cocoa世界中,CGMutablePathRef是否有一个非抗锯齿的替代品?如果没有,有没有人知道一些OpenGL类或示例代码可能会让我更有效地绘制我的大线?
更新1-21-2014:现在有一个很棒的库可以完全满足我的需求:https://github.com/syedhali/EZAudio
如何为CAShapeLayer路径和fillColor设置动画?
如何为strokeEnd设置动画以显示正在绘制的路径?以及如何为fillColor设置动画?
目前,我正在尝试设计如何设置一个自定义按钮的动画,我有一个图像并具有坐标,但我发现你可以通过使用CGPath类或UIBezierPath创建一个按钮/对象类.有人可以告诉我两者之间有什么区别吗?
我想基于CGPath为CALayer的位置设置动画,但我想向后播放它.
有没有办法让路径向后动画,或者反转CGPath?
假设我在我的iOS应用程序中使用了自定义字体"Foo".我已将它添加到我的项目,plist等等,我可以UILabel
用它来渲染s等等.
现在,如果我想找出一系列能够"追踪"该字体中的字母"P"的点,我将如何获得该点序列?例如,假设我想用a CGPath
来绘制字母'P',就像绘图仪一样......
我只需要一个CGPoints
数组中的序列,如果绘制为路径将绘制一个'P'.
我意识到对于像'T'这样的字母,这可能没有意义,因为笔必须被提升以越过'T'.所以也许我需要一系列CGPath
的...
有关如何实现这一目标的任何提示?
谢谢!
图片http://img403.imageshack.us/img403/9582/paths.jpg
如果我通过将两个圆形路径加在一起来创建CGMutablePathRef,如左图所示,是否可以获得最终的CGPathRef,它只代表右边图像所示的外边框?
谢谢你的帮助!
简而言之:
frame
或bounds
为CAShapeLayer
(并且Apple未实现等效[UIView sizeThatFits]
)那么,什么是编程设定的新创建的框架的正确方法CAShapeLayer
与新添加的CGPath
?Apple的文档在此事上保持沉默.
我尝试过的东西,不起作用:
CAShapeLayer
CGPath
,将其添加到图层frame
- 它是{{0,0},{0,0}}
layer.frame = CGPathGetBoundingBox( layer.path )
帧现在是正确的,但路径现在是DOUBLE偏移 - 改变frame
路径有效地移动一个额外的(x,y)
像素
组: layer.bounds = CGPathGetBoundingBox( layer.path )
layer.position = CGPathGetBoundingBox( layer.path ).origin
有一件事我尝试过DID可以工作,但会导致其他地方出现问题:
编辑:一旦您自动旋转屏幕,这个BREAKS.我的猜测:Apple的自动旋转需要控制"转换"属性.
CAShapeLayer
CGPath
,将其添加到图层{{0,0},{0,0}}
layer.frame = CGPathGetBoundingBox( layer.path )
layer.transform = CGAffineTransformMakeTranslation( CGPathGetBoundingBox( …
我在创建我的应用程序之一swift 2
中Xcode 7.3.1
.但现在我打开了相同的应用程序Xcode 8.0
并执行更改.一些自动更改已完成,一些错误和建议显示我已更正它们.但我面临的问题是
let path = CGMutablePath()
CGPathMoveToPoint(path, nil, lineFrame.midX, lineFrame.midY)
CGPathAddLineToPoint(path, nil, lineFrame.origin.x + lineFrame.width / 2, lineFrame.origin.y)
Run Code Online (Sandbox Code Playgroud)
我试图创建path
,但显示错误
CGPathMoveToPoint
不可用:使用move(to:transform :)CGPathAddLineToPoint
不可用:使用addLine(to:transform :)
如果有人有解决方案,请告诉我.
我试图将矢量绘图程序中的路径导入到ios环境中.我想让他们进入CGpaths或UIbezierpaths.我最感兴趣的是从adobe illustrator导入路径.最好的方法似乎保存为svg然后导入.
我找到了一些资源来解析导出的描述路径的SVG文件.但是,我发现的一切只涉及绝对路径而不是相对路径.下面的路径有大写字母C和小写字母C. 我知道如何解析大写C(绝对路径),但我不知道如何解析小写c(相对路径)
我正在寻找帮助编写一个解析器,用于将svg文件导入ios/cocoa.我认为通过在互联网上搜索数周来判断这一点非常重要.
这是我想要导入我的iPhone应用程序的路径示例.我不想导入图像,我想要路径本身.所以,我可以操纵它.任何帮助将非常感激.
x="0px" y="0px" width="320px" height="436px" viewBox="-1.4 -0.5 320 436"
d="M294.1,116C290.6,1.4,170.9,0.4,159.6,0.5
C148.3,0.4,28.7,1.4,25.2,116c-3.7,120.3-49.6,141.4-5.9,233.9c41.3,87.4,130.7,87,140.4,86.7c9.7,0.3,99.1,0.8,140.4-86.7
C343.7,257.4,297.8,236.3,294.1,116z
Run Code Online (Sandbox Code Playgroud)
如果这是绝对的路径,我现在就能解决这个问题.它是相对的(即低位(c)路径)真的令我困惑.
在预发布文档中,似乎没有Swift版本的CGPathApply.有没有等价物或替代品?我正在尝试获取CGPath的所有子路径,以便我可以从不同的起点重绘它.
cgpath ×10
iphone ×5
ios ×4
cashapelayer ×2
quartz-2d ×2
swift ×2
audio ×1
calayer ×1
cocoa ×1
nsbezierpath ×1
objective-c ×1
svg ×1
swift3 ×1
uibezierpath ×1
uifont ×1
waveform ×1
xcode8 ×1