我正在编写一些东西,我随着时间的推移从硬件指南针中获取了一堆值.这个指南针非常准确并且经常更新,结果是如果它略微摇晃,我最终会得到与其邻居非常不一致的奇数值.我想要平滑这些价值观.
做了一些阅读后,看起来我想要的是高通滤波器,低通滤波器或移动平均器.我可以得到移动平均线,只保留最后5个值或其他值的历史记录,并使用我的代码中下游的那些值的平均值,我曾经只使用最近的值.
我认为这应该可以很好地消除那些摇摆不定的情况,但是我觉得它可能非常低效,这可能是正确的程序员已知问题之一,有一个非常巧妙的Clever Math解决方案.
然而,我是那些可怕的自学成才的程序员之一,在与CompSci或Math几乎模糊不清的任何事情上都没有一丝正规教育.稍微阅读一下就表明这可能是一个高通或低通滤波器,但是我找不到任何可以理解为像我这样的黑客可以理解这些算法对一组数值的影响的术语,更不用说如何数学运作.例如,这里给出的答案在技术上确实回答了我的问题,但只有那些可能已经知道如何解决问题的人才能理解.
确实是一个非常可爱和聪明的人可以用艺术毕业生可以理解的方式来解释这个问题以及解决方案的工作原理.
我有一个应用程序,我正在做一些自定义绘图,渐变背景上的一堆线,就像这样(忽略文本,它们只是UILabels):
http://prehensile.co.uk/outgoing/Screenshot2010-06-09at12.22.32.png
目前,这一切都是通过启动一个新的CGContext,使用CGContextDrawLinearGradient和CGContextStrokePath将内容绘制到其中,最后使用UIGraphicsGetImageFromCurrentImageContext保存结果图像完成的.在我布置那些标签的同时计算定位信息,所以当使用drawRect绘制包含UIView时,它是一个PITA(并且重复工作)再次计算它,所以我在它之前绘制它进入UIImage的时间.一切正常,到目前为止一切顺利.
但是,我有一种潜在的怀疑,即使用CALayers进行此绘图可能更有效.我(粗略)理解这两种方法之间的区别在于CALayer更像是一堆绘制内容的指令,因此在实际绘制在屏幕上之前占用的内存较少,而提前将所有内容绘制到UIImage意味着无论是否绘制,你都会在内存中一直有一个很好的位图.
这是正确的理解吗?什么通常被认为是在iPhone上绘制自定义图像的最佳方式?
假设我已经为图标视图创建了一个XIB.然后,我希望通过引用在不同的 XIB容器视图中嵌入此图标视图的多个实例,因此,如果我在原始图标视图XIB中更改属性/布局,则容器视图XIB中的实例会反映这些更改.
基本上,通过引用嵌入.
也许我是密集的,但是当将视图拖入容器视图时,接口生成器的默认行为似乎是将所有内容复制过来,而不是引用原始的XIB?将与图标视图关联的类的实例拖到容器视图中只会产生空白视图.
我确信有办法做到这一点,但如果我能搞清楚,我该死的.我通常会像瘟疫那样避免IB;)
我已经习惯了在其他语言中使用其他语言来声明循环外的重用变量,就像这样:
NSString *lcword;
for( NSString *word in tokens )
{
lcword = [ word lowercaseString ];
...
}
Run Code Online (Sandbox Code Playgroud)
在Objective-C中执行此操作是否合理,或者编译器是否足够聪明以使其不必要?
我正试图让GameKit使用本地配对[[GKMatchmaker sharedMatchmaker] startBrowsingForNearbyPlayersWithReachableHandler:].基本上,我正在尝试实现无接口的本地匹配:只要我本地附近有一个玩家,我想连接并开始匹配.重要的是,我只是想为本土球员做到这一点:我从来没有想在互联网上自动匹配.
我在iTunes iTunes中为我的应用启用了Game Center,并在我用来测试的每台设备上注册了一个不同的沙盒帐户.
我尝试了两种配对GKMatchmakerViewController(在验证本地播放器之后)和程序化配对startBrowsingForNearbyPlayersWithReachableHandler:,在iPhone 4和第四代iPod Touch上运行相同的代码在我的桌面上彼此相邻.都没有找到另一个; 当使用GKMatchmakerViewController界面寻找附近的球员仍然在
寻找玩家......
微调器,使用时startBrowsingForNearbyPlayersWithReachableHandler:,通知块永远不会被调用.
这是我目前的测试代码块:
-(void)connectLocal
{
if( ![GKLocalPlayer localPlayer].isAuthenticated )
{
// authenticateLocalPlayer calls connectLocal again after authentication is complete
[ self authenticateLocalPlayer ];
return;
}
[[GKMatchmaker sharedMatchmaker] startBrowsingForNearbyPlayersWithReachableHandler:^(NSString *playerID, BOOL reachable) {
NSLog(@"Reachability changed for player %@", playerID );
} ];
}
Run Code Online (Sandbox Code Playgroud)
文档在这个主题上有点稀疏和混乱,特别是当涉及到本地多人游戏和互联网上的比赛之间的差异时.例如,在找到加入该匹配的玩家之前,似乎有必要对本地玩家进行身份验证并创建匹配(创建任何匹配以匹配请求开始).然而,这个小金块似乎暗示:
标准用户界面允许玩家发现附近的其他玩家,即使这两个玩家当前都没有直接连接到Game Center.
另外,在搜索附近玩家中描述的流程中,在通过传递给通知块的玩家找到玩家之后,直到步骤3才创建匹配请求 …
我使用自定义扩展程序绘制可滚动图形,CALayer其中包含一系列CGContextAddCurveToPoint调用[ MyCustomCALayer drawInContext].
我实际上并没有绘制图形的整个长度,而是每次UIPanGestureRecognizer更新时都会重新绘制图层的内容以反映新的水平偏移.这样,我只绘制图形的可见部分,图层的边界仅扩展到屏幕的大小.
[ MyCustomCALayer setNeedsDisplay ]在图形数据更改或平移偏移更改时[ MyCustomCALayer drawInContext]调用,然后调用它.
但是,每当我在平移过程中重绘图层时,我都会遇到这种奇怪的重影.一些搜索建议它可能是通过重绘图层的内容调用的隐式动画,但我找不到明确的答案.
以下是图表在休息时的样子:

这是在平移期间,重影重绘:

当然,当我做画全图表和调整图层的position属性进行平移它没有重影,但在内存中一个很长的位图看起来是一件坏事.
以前有人见过这种重影吗?如果它(我怀疑)是隐式动画,我该如何禁用所述动画?
我有一个Core Data存储,其中许多实体应该是其特定NSEntityDescription的唯一实例.我目前通过为给定的描述创建一个新实体来做到这一点,然后:
-(void)clearMyManagedObjectsExceptFor:(NSManagedObject*)except {
NSArray *managedObjects = [ self fetchMyManagedObjectsWithPredicateOrNil: nil ];
// returns all managed objects for a given NSEntityDescription
NSManagedObject *managedObject;
for( NSUInteger i = 0; i < [ managedObjects count ]; i++ ){
managedObject = [ managedObjects objectAtIndex: i ];
if( ![ managedObject isEqual: except ] ){
[ managedObjectContext deleteObject: managedObject ];
}
}
}
Run Code Online (Sandbox Code Playgroud)
哪个有效,但感觉我应该能够做到这一点!=使用NSPredicate而不是迭代,但我无法弄清楚正确的谓词语法.任何人都可以开导我吗?
ios ×2
iphone ×2
objective-c ×2
xcode ×2
algorithm ×1
calayer ×1
core-data ×1
drawing ×1
game-center ×1
gamekit ×1
loops ×1
nspredicate ×1
optimization ×1
theory ×1
xib ×1