小编Gor*_*tch的帖子

如何在iPhone上实现室内导航

我想在一个建筑物中找到iPhone,以构建一个具有与美国自然历史博物馆的iPhone应用程序类似功能的应用程序.没有良好的GPS接收,因为我想要覆盖的地窖里也有房间.

可以拯救我的是整个区域都有良好的无线网络覆盖,所以我的想法是根据范围内已知位置的wifi基站对位置进行三角测量.但是我找不到公共API来找出哪个基站在范围内.

问题

  1. 您是否知道上述应用程序如何在室内获得正确的位置?
  2. 可以手动将wifi基站添加到Apple的数据库并使用通常的CoreLocation吗?
  3. 你有其他想法如何实现它?

很感谢任何形式的帮助!

边界条件

  1. 室内导航仅在活动期间用于引导新来的建筑物,因此不应安装复杂的基础设施.
  2. 大约有14-18间客房.它们位于建筑物的不同部分,因此连接所有部件将非常昂贵.
  3. 首选解决方案不需要任何类型的服务器后端,并且可以使用wifi接入点列表及其相应位置.

iphone geolocation

15
推荐指数
1
解决办法
9370
查看次数

如果运行脚本阶段发生错误,如何中止构建

我想使用运行脚本目标在mercurial中标记我的修订版并将其上传到服务器.我创建了一个新的运行脚本目标,它取决于构建我的应用程序的其他目标,然后我一个接一个地直接添加了两个运行脚本阶段.

现在我的问题是:如果运行脚本阶段#1给出错误(脚本的返回代码是不等于0),我怎么能阻止执行运行脚本阶段#2?

第二个脚本会将文件上传到服务器,所以我只想执行这个阶段,如果一切顺利的话.

xcode build-process

14
推荐指数
3
解决办法
6277
查看次数

使用NSFetchedResultsController反映父对象中关系中对象的更改

我有两个实体事件和时间.事件实体与时间实体具有1对多的关系,因为每个事件可以多次执行.现在我想在tableView中按时间顺序显示所有事件.所以我设置了一个fetchedResultsController来获取所有时间对象,根据开始时间对它们进行排序,并通过使用与事件对象的关系来显示事件信息.到现在为止还挺好.但是现在如果用户在表格中选中一个条目,我将一个事件对象传递给detailViewController,在那里可以编辑事件.

问题是现在只有事件实体被标记为已更新.我通过查看NSManagedObjectDidChange通知的userInfo目录找到了这个.因此,FRC上的委托方法不会被触发,因为没有更改时间对象.

如何手动将时间对象标记为已更改,以使FRC识别更改并相应更新单元格?我尝试解雇KVO方法willChangeValueForKey,didChangeValueForKey但到目前为止它没有用.

非常感谢托马斯

core-data nsfetchedresultscontroller

13
推荐指数
3
解决办法
2920
查看次数

在LaTeX中使用带有moderncv类的脚注

我有以下问题:我想将脚注与moderncv文档类一起使用.在我的情况下,如果我尝试编译以下示例,它会给我一个错误:

\documentclass[12pt, a4paper]{moderncv}
\moderncvtheme[grey]{classic}

\firstname{First}
\familyname{Last}

\begin{document}
\section{Start}
Hello\footnote{this is a footnote}
\end{document}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

!未定义的控制序列.\ H @@ footnotetext ... color @ begingroup\@makefntext {\ rule\z @\footnotesep\i ... l.9 Hello\footnote {this is a footnote}

我不确定为什么,但显然,如果我将文档类更改为文章,它可以归咎于现代文档类.

我感谢任何帮助.

latex

11
推荐指数
1
解决办法
9803
查看次数

Acessing a serial to USB device with I/O kit

I have the following problem: I have a Wintec WBT-202 GPS device which has the ability to transmit the location data live as NMEA data over USB. Inside this USB it is just a USB to serial bridge which is run under Windows using the standard usbser.sys driver.

My problem is to get it working under Mac OS X.

The hardware the USB GPS mouse uses an Atmel AT91SAM7S256 chip which also is responsible for the USB interface.

The problem …

c macos usb cocoa iokit

10
推荐指数
1
解决办法
5922
查看次数

在自定义属性更改时重新绘制自定义CALayer子类

我正在尝试构建一个绘制文本的特殊图层.这TWFlapLayer有一个属性字符串作为属性:

TWFlapLayer.h:

@interface TWFlapLayer : CALayer
@property(nonatomic, strong) __attribute__((NSObject)) CFAttributedStringRef attrString;
@end
Run Code Online (Sandbox Code Playgroud)

并合成TWFlapLayer.m:

@implementation TWFlapLayer

@synthesize attrString = _attrString;

/* overwrite method to redraw the layer if the string changed */

+ (BOOL)needsDisplayForKey:(NSString *)key
{
    if ([key isEqualToString:@"attrString"]){
        return YES;
    } else {
        return NO;
    }
}

- (void)drawInContext:(CGContextRef)ctx
{
    NSLog(@"%s: %@",__FUNCTION__,self.attrString);
    if (self.attrString == NULL) return;
    /* my custom drawing code */
}
Run Code Online (Sandbox Code Playgroud)

我的意图是如果使用合成的setter方法更改了attrString属性,则使用我的自定义绘图方法自动重绘图层.但是,从放置在drawInContext:方法中的NSLog语句中,我看到该层重绘.

通过在needsDisplayForKey方法中放置一个断点,我确保在被要求输入attrString键时返回YES.

我现在正在改变这样的attrString

// self.frontString is a NSAttributedString* that …
Run Code Online (Sandbox Code Playgroud)

cocoa core-animation quartz-graphics

9
推荐指数
1
解决办法
1473
查看次数

在图层托管视图上调用setNeedsDisplay:YES不会重绘视图

我在自定义NSView子类中设置了这样的图层托管视图:

[self setLayer:rootLayer];
[self setWantsLayer:YES];
Run Code Online (Sandbox Code Playgroud)

在我调用setNeedsDisplay每个子图层后,我将所有子图层添加到图层树中.每个图层的内容都由drawLayer:inContext我图层的委托方法提供.

这是我的问题:

初始化视图后,视图会正确绘制.但是,当模型发生变化并且我[myCustomView setNeedsDisplay:YES];从视图控制器调用时,drawLayer:inContext不会调用它.

我现在很困惑如何更新视图:

  • 我是否必须setNeedsDisplay在图层树中的每个CALayer上调用该方法?
  • 不应该setNeedsDisplay:YES在图层托管视图本身的调用触发重绘整个图层树吗?

谢谢你的帮助.

编辑

我在NSView Class引用中找到了一些东西

图层支持的视图是由Core Animation图层支持的视图.视图完成的任何绘制都将缓存在背衬层中.您通过简单地调用setWantsLayer配置了一个图层支持的视图:值为YES.视图类将自动为您创建背衬层,并使用视图类的绘制机制.使用图层支持的视图时,不应直接与图层交互.

图层托管视图是包含您要直接操作的Core Animation图层的视图.您可以通过实例化Core Animation图层类的实例并使用视图的setLayer:方法设置该图层来创建图层托管视图.执行此操作后,您将调用setWantsLayer:值为YES.使用图层托管视图时,不应依赖视图进行绘制,也不应将子视图添加到图层托管视图.

链接到文档

在我的情况下,我有一个图层托管视图.那么这确实意味着我必须手动触发重绘吗?我应该在自定义NSView中实现一个伪drawRect方法来调用更改的CALayers上的相应setNeedsDisplay吗?

cocoa core-animation

8
推荐指数
1
解决办法
7762
查看次数

使用CoreText的变音符号的边界框

我试图使用各种技术在MacOS X/iOS中获取角色的边界框.我现在正在展示我的所有尝试.到目前为止,如果我想获得像"Ä"这样的变音字符的大小,代码就会失败.

运用 CTFontGetBoundingRectsForGlyphs

-(void) resizeLayer1:(CATextLayer *)l toString:(NSString *)string
{
    // need to set CGFont explicitly to convert font property to a CGFontRef
    CGFontRef layerFont = CGFontCreateWithFontName((CFStringRef)@"Helvetica");
    l.font = layerFont;

    string = l.string;
    NSUInteger len = [string length];

    // get characters from NSString
    UniChar *characters = (UniChar *)malloc(sizeof(UniChar)*len);
    CFStringGetCharacters((__bridge CFStringRef)l.string, CFRangeMake(0, [l.string length]), characters);

    // Get CTFontRef from CGFontRef
    CTFontRef coreTextFont = CTFontCreateWithGraphicsFont(layerFont, l.fontSize, NULL, NULL);

    // allocate glyphs and bounding box arrays for holding the result
    // assuming that …
Run Code Online (Sandbox Code Playgroud)

cocoa

8
推荐指数
1
解决办法
3452
查看次数

编写支持iOS 3.1.3和iOS 4.x的iOS应用程序时的陷阱

我想写一个可以在iOS 3.1.3到iOS 4.1上运行的应用程序.我知道如何设置部署目标和基本SDK.

在阅读Apple文档之后,它严重依赖于检查类是否可用和/或实例是否响应特定选择器.

现在我的问题:

  1. 如果Apple从3.1.3到4.x上课,会发生什么?当只检查类名时,它也可以在iOS 3.1.3上使用吗?所以在这个版本上我将使用私有API,我不想要.你会怎么检查?这真的是一个问题,还是我担心太多?
  2. 您还会使用由iOS版本定义的预处理器符号吗?
  3. 我应该选择armv6或armv7的架构?我认为armv6也可以在armv7上运行,这是正确的吗?
  4. 如果我在我的代码中使用iOS 3.1.3中没有的东西,我可以从编译器获得任何帮助吗?它会被检查吗?
  5. 我应该知道哪些突出的陷阱?

我已经看过WWDC10的会议130"面向未来的应用程序",所以事情已经知道了.

谢谢.

backwards-compatibility ios

6
推荐指数
1
解决办法
2515
查看次数

使用CoreGraphics CGContextDrawImage在CATiledLayer中绘图

我想在iPhone OS 3.1.3中使用CATiledLayer并且这样做所有绘图-(void)drawLayer:(CALayer *)layer inContext:(CGContext)context只需要使用coregraphics.

现在我遇到了iPhone上翻转坐标系的问题,并且有一些建议如何使用变换来修复它:

我的问题是我无法让它发挥作用.我开始使用PhotoScroller示例代码并仅使用coregraphics调用替换绘图方法.看起来像这样

- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)context {
CGContextSaveGState(context);
CGRect rect = CGContextGetClipBoundingBox(context);
CGFloat scale = CGContextGetCTM(context).a;
CGContextConcatCTM(context, CGAffineTransformMakeTranslation(0.f, rect.size.height));
CGContextConcatCTM(context, CGAffineTransformMakeScale(1.f, -1.f));

CATiledLayer *tiledLayer = (CATiledLayer *)layer;
CGSize tileSize = tiledLayer.tileSize;


tileSize.width /= scale;
tileSize.height /= scale;
// calculate the rows and columns of tiles that intersect the rect we have been asked to draw
int firstCol = floorf(CGRectGetMinX(rect) / tileSize.width);
int lastCol = floorf((CGRectGetMaxX(rect)-1) / tileSize.width);
int firstRow = floorf(CGRectGetMinY(rect) …
Run Code Online (Sandbox Code Playgroud)

iphone core-graphics cgcontext catiledlayer

6
推荐指数
1
解决办法
8408
查看次数