小编Ale*_*one的帖子

iPhone iOS如何使用drawLayer:inContext:在CALayer上绘制文本?

我有一个使用此方法绘制自身的简单滚动图。我正在寻找一种向该图形添加文本标签的方法,但是找不到如何执行此操作。

我试过了:

[@"test" drawInRect: CGRectMake(0, 0, 10, 10) withFont:[UIFont systemFontOfSize:8]];
Run Code Online (Sandbox Code Playgroud)

我收到错误消息,指出上下文0x0无效。如何修改下面的代码以将文本绘制代码指向正确的上下文?

-(void)drawLayer:(CALayer*)l inContext:(CGContextRef)context
{
    // Fill in the background
    CGContextSetFillColorWithColor(context, graphBackgroundColor());
    CGContextFillRect(context, layer.bounds);

    // Draw the grid lines
//  DrawGridlines(context, 0.0, 32.0);

    // Draw the graph
    CGPoint lines[64];
    int i;
    // X
    for(i = 0; i < 32; ++i)
    {
        lines[i*2].x = i;
        lines[i*2].y = -(xhistory[i] * 480.0)-10;
        lines[i*2+1].x = i + 1;
        lines[i*2+1].y = -(xhistory[i+1] * 480.0)-10;
    }

    CGContextSetStrokeColorWithColor(context, graphZColor());
    CGContextStrokeLineSegments(context, lines, 64);
}
Run Code Online (Sandbox Code Playgroud)

iphone core-graphics objective-c calayer ios

3
推荐指数
1
解决办法
2798
查看次数

iOS7创建和使用SKTextureAtlas的正确方法是什么?

我不确定纹理地图集的底层实现,所以我的问题是 - 处理从它们中拉出纹理的正确方法什么?我需要遍历各种地图集并提取64个随机纹理.

创建静态图集并重用引用来拉出纹理?

static SKTextureAtlas *monsterAtlas;
static int monsterCount;

monsterAtlas = [SKTextureAtlas atlasNamed:@"monsters"];
monsterCount = [monsterAtlas textureNames].count;

//pull out a random texture
NSString* textureName = [[monsterAtlas textureNames] objectAtIndex: arc4random()%monsterCount];
SKTexture* texture = [monsterAtlas textureNamed:textureName];
Run Code Online (Sandbox Code Playgroud)

-要么-

每次我需要纹理时创建一个新的地图集?

SKTextureAtlas *atlas = [SKTextureAtlas atlasNamed:@"monster"];
SKTexture *f1 = [atlas textureNamed:@"monster-walk1.png"];
Run Code Online (Sandbox Code Playgroud)

我问的原因是,使用第一种方法,我的代码可能非常不合适,因为我将创建10个以上的图集引用.这会占用太多内存吗?在第二种方法中,我担心每次执行循环迭代时我都会做很多额外的工作来创建图册.我该怎么做?

reference ios7 sprite-kit texture-atlas

3
推荐指数
1
解决办法
590
查看次数

是否存在将威胁范围与2D网格上的任意移动范围相结合的算法?

我正在构建一个简单的基于2D网格的游戏,我正在寻找一种方法来计算每个角色可以在游戏板上施加的"威胁"区域.当前地点的威胁很容易计算 - 这是下面的红色钻石.但我希望将这些信息与任意"可以走到这里"区域(橙色)结合起来.

这个算法一起给我一个我的角色可以从所有可用移动和当前位置攻击的所有瓦片的组合.

在此输入图像描述

当然,我可以迭代所有可能的移动,在那里应用钻石形状并创建一组所有威胁方块.有没有更好的办法?

algorithm map tile

3
推荐指数
1
解决办法
647
查看次数

iOS7 Sprite Kit可以存档整个场景并将其用作保存游戏吗?

我正在看userDataSKNode 的财产并注意到这个说法:

Sprite Kit不会对存储在节点中的数据执行任何操作.但是,在归档节点时会归档数据.

这让我想到了 - 通过归档场景及其所有的家属/控制器,是否可以实现单一的保存游戏功能?

我试图理解是否有一些神奇的[存档]消息,我可以发送到场景或场景视图,以消除编写自定义数据结构来存储保存游戏的需要.

save ios sprite-kit sknode skscene

3
推荐指数
1
解决办法
1540
查看次数

Xcode 7 - 如何为UI测试启动界面录制?

我正在看WWDC 2015会议104"Xcode中的新功能",并且在Xcode 7中我可以记录接口单元测试以自动点击按钮,输入文本等.

我有一个包含UITests的新项目,但我如何开始记录UITests的界面交互?

以下是测试中包含的片段:

- (void)setUp {
    [super setUp];

    // Put setup code here. This method is called before the invocation of each test method in the class.

    // In UI tests it is usually best to stop immediately when a failure occurs.
    self.continueAfterFailure = NO;
    // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method.
    [[[XCUIApplication alloc] init] launch];
}
Run Code Online (Sandbox Code Playgroud)

xctest ios9 xcode7 xcode-ui-testing

3
推荐指数
1
解决办法
3439
查看次数

检查调度队列是否无法跟上任务并积压

我正在使用串行调度队列来改变来自相机的图像以获取间隔拍摄视频应用.到目前为止,我正在使用GCD将图像处理卸载到第二个线程.

我希望该应用程序可以运行很长时间,并且不希望以某种方式压倒设备处理请求.

有没有办法检查调度队列是否无法跟上添加到它的操作数量(创建积压)?

dispatch_async(backgroundQueue, ^{

    __block UIImage* backupImage = self.thermalImage;
    backupImage = [self imageByDrawingCircleOnImage:backupImage];

    dispatch_async(dispatch_get_main_queue(), ^{
        [self.thermalImageView setImage:backupImage];
    });
});
Run Code Online (Sandbox Code Playgroud)

multithreading cocoa-touch objective-c grand-central-dispatch ios9

3
推荐指数
1
解决办法
120
查看次数

iOS Swift4如何检查string是否为nil并且不为空?

如何检查可选字符串对象在Swift4中是否既不是空字符串“”也不是nil?我最终不得不写这些奇怪的支票,因为

 //object has instance variable     
 var title: String?

 //invalid comparison - cannot compare optional and non optional
 if object.title?.count > 0
 {

 }

 //valid but ugly
 if object.titleString == nil {
      //has nil title
 }
 if let title = object.title
 {
    if title.count == 0
    {
        //has a "" string
    }
 }
Run Code Online (Sandbox Code Playgroud)

string ios swift4

3
推荐指数
1
解决办法
2738
查看次数

iOS 14 - 当精确位置权限被拒绝时,如何让 iBeacon 唤醒应用程序?

我\xe2\x80\x99m 之前在使用 iOS 14.0 时遇到了以下问题 - 通过后台位置权限我可以:

\n
    \n
  • 注册iBeacon区域监控
  • \n
  • 从应用程序切换器杀死该应用程序
  • \n
  • 点击屏幕即可看到应用程序在控制台中重新启动。
  • \n
  • 应用程序正在运行但不在应用程序切换器中
  • \n
\n

使用 iOS14 重新测试,没有精确的位置,我的应用程序不再因应用程序切换器终止而被唤醒。

\n

重新启用精确位置权限,一切都像以前一样。

\n

在没有精确位置权限的情况下,我需要做什么才能让后台应用程序唤醒 iBeacon 区域?

\n

或者

\n

如何检测缺少精确位置权限并通知用户应用程序将无法按预期运行?

\n

ios14精确权限缺失

\n

cllocationmanager ibeacon region-monitoring background-task ios14

3
推荐指数
1
解决办法
2398
查看次数

使用KVO时出现NSInternalInconsistencyException

我正在尝试使用我从iPhone教程书中获得的KVO示例,但是得到了这个例外

   Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '<UINavigationController: 0x139630>: An -observeValueForKeyPath:ofObject:change:context: message was received but not handled.
Key path: dataUpdated
Observed object: <FilterDetailsController: 0x1b9930>
Change: {
    kind = 1;
}
    Context: 0x0'
     Call stack at first throw:
    (
        0   CoreFoundation                      0x320d3987 __exceptionPreprocess + 114
        1   libobjc.A.dylib                     0x3271849d objc_exception_throw + 24
        2   CoreFoundation                      0x320d37c9 +[NSException raise:format:arguments:] + 68
        3   CoreFoundation                      0x320d3803 +[NSException raise:format:] + 34
        4   Foundation                          0x35c316e9 -[NSObject(NSKeyValueObserving) observeValueForKeyPath:ofObject:change:context:] + 60
        5   Foundation                          0x35bd4a3d NSKeyValueNotifyObserver + 216
        6 …
Run Code Online (Sandbox Code Playgroud)

cocoa cocoa-touch key-value-observing ios4 ios

2
推荐指数
1
解决办法
2627
查看次数

iOS - 用按钮杀死应用程序?

我有一个运行一段时间的应用程序,但需要每天重置,因为它的生命周期与大多数其他应用程序有点不同.似乎最简单的方法是杀死应用程序并重新启动它.

我找到了一个解决方案,当点击主页按钮时杀死应用程序:

在应用程序的Info.plist中,添加一个布尔键UIApplicationExitsOnSuspend,其值为YES

这不是我想做的事情.我需要在使用之前为用户提供杀死/重置应用的选项.我当然可以要求用户双击主页键并长按> x杀死应用程序.然而,这对某些用户来说太复杂了.

另一个简单的解决方案是让一个按钮做一些防撞,比如除以0,虽然我不确定应用程序商店是否会惩罚我的应用程序每天为所有用户"崩溃".

有没有人找到一种方法为iPhone应用程序添加"退出"按钮?在android中,我可以做system.exit(0),这有效.什么是iPhone替代品?

iphone objective-c exit ios

2
推荐指数
1
解决办法
1425
查看次数