我正在尝试为iOS项目绘制图形均衡器。

均衡器将具有7条,代表不同的频段,而不是根据实时音频数据上下移动。

谁能建议在iOS中解决此问题的最佳方法?

新的频率数据大约为11Hz,因此条形图必须每秒动画11次。

  1. 是否为每个栏创建UIView并动态调整其框架高度?
  2. 是否将条形图绘制为粗CGStrokes,并根据需要在父视图中重新绘制它们?
  3. 另外一个选项?

提前致谢

===============>>#1 票数:1

如果条形图是纯色,则按需调整大小的CALayer可能是最有效的方法。 这样,您还可以选择在尺寸之间进行动画处理。

视图调整大小会触发您不需要的布局周期。 使用CG调用进行绘制非常慢。

显然,唯一真正的发现方法是使用仪器和核心动画工具(在设备上)进行概要分析。 但是从经验来看,图层大小比绘制要快。

===============>>#2 票数:1 已采纳

您想使用Core Animation。 基本原理是创建一堆“图层”对象,这些对象可以是位图图像,矢量形状或文本。 每层都存储在GPU上,大多数操作可以每秒60帧的速度进行动画处理。

可以将层想象成HTML页面中的DOM节点,它们可以相互嵌套,并且可以像CSS一样将属性应用于每个层。 可用的属性列表与GPU可以有效执行的所有操作匹配。

听起来您想要矢量形状。 基本上,您可以在启动时创建所有形状,例如在UIView子类的awakeFromNib方法中。 对于简单的矩形,请使用CALayer并设置背景色。 对于更复杂的形状,请创建CAShapeLayerUIBezierPath ,然后将其与shapeLayer.path = bezierPath.CGPath;一起应用shapeLayer.path = bezierPath.CGPath;

然后,每当要更改某些内容时,便将这些更改应用于图层对象。 例如,在这里我旋转一个具有1秒线性动画的图层:

[CATransaction begin];
[CATransaction setAnimationDuration:1];
[CATransaction setAnimationTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]];

[self.needleLayer setValue:[NSNumber numberWithFloat:DegreesToRadians(degrees) forKeyPath:@"transform.rotation.z"];

[CATransaction commit];


// you'll want to declare this somewhere  
CGFloat DegreesToRadians(CGFloat degrees)
{
  return degrees * M_PI / 180;
}

可以使用CAKeyframeAnimation来完成更复杂的动画,例如计划安排来回执行的一系列更改: https : //developer.apple.com/library/ios/documentation/Cocoa/Conceptual/CoreAnimation_guide/CreatingBasicAnimations/CreatingBasicAnimations.html

注意“核心动画”仅执行2D图形。 Apple拥有Scene Kit,对于3D来说基本上是相同的东西,但到目前为止,它仅在OS X上可用。希望iOS 8包括它,但是直到那时,如果要在iOS上使用3D图形,则需要使用Open GL。

===============>>#3 票数:-1

绝对不是每个UIView,而是整个均衡器的单个UIView。 用适当的CG调用填充drawRect方法以绘制所需的内容。 您可以将视图排队,以根据需要使用适当的数据进行刷新。 利用CADisplayLink可以帮助您获得所需的帧速率。

https://developer.apple.com/library/ios/documentation/QuartzCore/Reference/CADisplayLink_ClassRef/Reference/Reference.html

注意:如果您更喜欢轻于UIView的东西,也可以继承CALayer并在其中进行绘制,但是我认为使用前者会很好。

  ask by bodacious translate from so

未解决问题?本站智能推荐:

2回复

在iOS 6.1或7中,在屏幕顶部显示UIView的最佳方法是什么?

这是一个简单的程序,用于在屏幕顶部显示蓝色视图。 我有逻辑将y变量设置为0或20(如果iOS版本为7或6以下)。 有一个更好的方法吗?
2回复

检查iOS 7或更早版本的最佳方法? [重复]

这个问题在这里已有答案: 如何查看iOS版本? 36个答案 我需要根据我运行的iOS版本重新配置一些UI,所以我需要一个检查iOS版本的好方法。 暂时我这样做: 我不想硬编码这些字符串比较并根据它做出决定。 有没有更好的方法来做到这一点?
1回复

在iOS7中使用CGContext绘制的问题

我为iPad开发了一个绘图工具。 在iOS6上使用该工具时,工作正常,但是当在iOS7上使用该工具时,在触摸结束后不会出现绘制线。 我使用CGContextAddLineToPoint和UIGraphicsGetCurrentContext进行绘图。 谢谢 这是代码
2回复

保持iOS6和iOS7支持的最佳方法? [关闭]

如您所知,不久我们将拥有新的iOS7版本,然后我们应该使我们的App适应新的平面样式。 我的问题是:有人知道iOS 6(拟形)和iOS 7(扁平)设计暂时共存的最佳实践是什么? 对我来说,最好的是每个设备屏幕大小可以使用2个不同的Storyboard,并且可以使用“ preproce
1回复

从应用程序委托中消除模态视图的最佳方法

这就是我想要做的。 我正在创建一个应该处理Apple Map应用程序请求的路由应用程序。 地图应用程序通过将以下消息发送给应用程序委托来做到这一点 - (BOOL) application: (UIApplication *) application openURL:(NSURL *)
2回复

管理iPhone 5(4英寸)和其他iPhone(3.5英寸)的UI的最佳方法是什么?

这个问题已经在这里有了答案: 如何为iPhone 5屏幕分辨率开发或迁移应用程序? 30个答案 我正在开发一个通用的iOS应用程序,并且UI基于iPhone 5(4英寸显示屏)完成,现在我必须使所有UI东西在较旧的iPhone(3.5英寸显示屏)上看起来都很好。
1回复

调用PerformSelector的最佳方式-iOS

我正在调用使用不同时间戳的URL的方法。 但是,数据处理可能需要比我定义的时间更长的时间。 下面的部分显示了该方法的调用 这部分是分析数据的起点。 但是有时时间间隔不足以获取新数据,尤其是在互联网连接不好的情况下。 你能指导我吗? 我该如何解决这个问题? 最佳
1回复

实现滑出式导航IOS的最佳途径

我使用了一个相当常见的设计模式来进行标准的IOS滑出导航。 我的设计基于这里的例子: http : //www.raywenderlich.com/32054/how-to-create-a-slide-out-navigation-like-facebook-and-path 。 基本设计
2回复

在iOS 6中使用自定义容器视图控制器进行旋转

我的应用程序中有一个自定义容器视图控制器,在iOS 6中无法实现与iOS 5中相同的旋转行为。 容器(称为containerVC)包含两个视图控制器,一个应保持纵向(portraitVC),另一个可以旋转为横向(rotatingVC)。 我使用分段控件在它们之间切换。 如果首先打开
2回复

ios身份验证的最佳做法和教程

为ios应用程序创建用户身份验证系统的最佳实践是什么? 关于该过程的任何好的教程或见解都将有所帮助(新手)。