背景图像大小雪碧套件游戏

我刚开始一个新的Sprite Kit项目来学习如何使用它。 我看了很多教程,但没有教程对我的问题/问题有一个答案。 我想为我的iPhone 5S创build一个应用程序。 所以屏幕尺寸是1136×640。 我为我的应用程序创build了一个1136×640背景图像。 但是,当我把图像添加到我的应用程序,它的waaay大! iOS模拟器只显示图像的中间部分。 有人能告诉我什么屏幕大小,我必须使用,为什么? 非常感谢! 这里是我从教程中复制的代码。 代码位于initWithSize方法的myScene.m文件中 SKSpriteNode *background = [SKSpriteNode spriteNodeWithImageNamed:@"myBackground"]; background.position = CGPointMake(CGRectGetMidX(self.frame),CGRectGetMidY(self.frame)); [self addChild:background]; 编辑 : 我search谷歌,发现这一点: viewDidLoad方法必须用“viewWillLayoutSubviews”来改变。 这是这个方法: – (void)viewWillLayoutSubviews { [super viewWillLayoutSubviews]; // Configure the view. SKView * skView = (SKView *)self.view; skView.showsFPS = YES; skView.showsNodeCount = YES; // Create and configure the scene. […]

iOS(Iphone / iPad / iPod Touch)设备有多less内存?

不同的iPhone有不同的发布内存4GB,8GB和16GB。 触摸可以有32GB。 我的理解是这是脱机内存(磁盘一样)。 我的Cocoa应用程序中有多less实际的快速RAM? 有预先configuration的虚拟金额吗?

在不同的线程上调用我的方法有哪些不同的方法?

我有一些数据计算方法(让它是“myMethod:”),我想移动到另一个线程的调用,因为我不想阻止我的主要用户界面function。 所以,开始做一些关于如何在另一个线程上调用我的方法的研究。 据我所知,目前有很多不同的方法来做到这一点。 这是一个列表: a)使用纯线程(可用于iOS 2.0): [NSThread detachNewThreadSelector:@selector(myMethod:) toTarget:self withObject:_myParamsArray]; b)使用简单的快捷方式(从iOS 2.0开始可用)。 可用于inheritance的NSObject,但该方法也属于NSThread类: [self performSelectorInBackground:@selector(myMethod:) withObject:_myParamsArray]; c)使用Grand Central Dispatch队列的新方法(从iOS 4.0开始): dispatch_async(dispatch_get_global_queue(0, 0), ^ { [self myMethod:_myParamsArray]; }); d)不知何故,使用一些类,如NSOperation,NSBlockOperation或NSOperationQueue,虽然不知道该怎么做(一些例子,将不胜感激) 目前,我曾经用过“b”这个案例,但是对这个利弊感兴趣,还有其他相关的build议。 更新:e)也发现了另一种执行类似线程的东西 – 运行循环 。 以下是苹果文档摘录: 运行循环是一个事件处理循环,用于安排工作和协调收到的事件。 运行循环的目的是在有工作要做的时候保持你的线程忙,当没有时候让线程进入睡眠状态。 恕我直言,或多或less你正在处理相同的任务 – 如何调用你的方法在单独的线程进行asynchronous操作。 更新2:已经有了NSInvocationOperation和NSOperationQueue和恕我直言的一些经验,这是相当方便的。 根据苹果文档,GCD和NSOperations是实现multithreading的首选方式。 而且,NSOperations从iOS 4.0开始运行在GCD上。 简而言之,你实例化NSIvocationOperation(作为你的方法的调用),然后实例化NSOperationQueue并将调用添加到队列中。 NSOperationQueue足够聪明,你可以将多个NSIvocationOperation对象(包装你的方法调用)和它们实例化到NSOperationQueue。 剩下的就放心了。 NSOperationQueue确定需要多less个并行线程来执行调用(NSInvocationOperation)并为您处理。 它可以在线程A上执行第一个调用,然后在线程B上执行第一个调用,在线程C上执行第三个,然后执行在线程B上,所以你不必担心这个问题。 但是,如果你想,你可以告诉NSOperationQueue最大的线程可以用来执行调用(例如1),但我没有这个需要。 默认情况下,所有的任务都是在主线程以外的地方执行的,所以操作队列默认是asynchronous的。 另外,如果你想在一个严格队列中执行你的方法调用(每个包装在单独的NSInvocationOperation中),那么你可以添加依赖关系,所以NSOperationQueue将保留方法调用顺序。 这是一个例子: // wrap your […]

为iOS应用程序保留/模拟webservices

我正在开发一个iOS应用程序,其主要目的是与一组远程Web服务进行通信。 对于集成testing,我希望能够运行我的应用程序对付某些具有可预测结果的假Web服务。 到目前为止,我已经看到两个build议: 创build一个为客户端提供静态结果的web服务器(例如这里 )。 实现不同的Web服务通信代码,基于编译时标志将调用Web服务或代码,将加载本地文件( 例如 另一个 )的响应。 我很好奇社区对这些方法的看法,以及是否有任何工具支持这个工作stream程。 更新 :然后让我提供一个具体的例子。 我有一个login表单,需要用户名和密码。 我想检查两个条件: wronguser@blahblah.com获取login被拒绝和 rightuser@blahblah.comlogin成功。 所以我需要一些代码来检查用户名参数,并给我一个适当的回应。 希望这就是我所需要的“假Web服务”的逻辑。 我如何干净地pipe理这个?

Objective-C,如何获取UTC时区的当前date?

我在尝试: NSDate *currentDateInLocal = [NSDate date]; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:SS.SSS'Z'"]; NSString *currentLocalDateAsStr = [dateFormatter stringFromDate:currentDateInLocal]; NSDateFormatter * dateFormatter2 = [[NSDateFormatter alloc] init]; NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"UTC"]; [dateFormatter2 setTimeZone:timeZone]; [dateFormatter2 setDateFormat:@"yyyy-MM-dd'T'HH:mm:SS.SSS'Z'"]; NSDate *currentDateInUTC = [dateFormatter2 dateFromString:currentLocalDateAsStr]; 但它仍然不代表当前的UTC时间,我怎么能实现这个? 谢谢

iOS 10不打印NSLog

Xcode 8.0 beta(8S128d)上的NSLog没有打印。 printf不变 这是我的代码: NSLog(@"hello from NSLog"); printf("hello from printf"); 以下是iOS 9模拟器上的输出: 2016-06-17 09:49:10.887 calmapp-dev[28517:567025] hello from NSLog hello from printf 以下是iOS 10模拟器上的输出: hello from printf

什么是iOS的常驻和脏内存?

有人可以告诉我,什么样的记忆是肮脏/居民,他们从哪里来? 驻留内存与Mac OS的“有线内存”是否相同? 这是我所看到的有关Mac OS内存: 有线:​​这是指内核代码等。 内存不应该被移出内存。 也知道作为常驻记忆。 共享:在两个或多个进程之间共享的内存。 这两个进程都会显示这么多的内存,所以在实际使用内存的时候有点误导。 真实:这是由task_info()报告的应用程序的“真实”内存使用情况 – 粗略统计当前进程的物理页数。 (RSIZE) 私有:这是一个进程在驻留内存中使用的单独使用的内存。 (RPRVT) 虚拟:映射到任何东西的进程中的地址空间总量 – 无论是variables或任何东西的任意大的空间 – 它都不等同于实际的虚拟机使用。 (VSIZE) 活动:当前标记为活动的内存,使用RAM。 Inactive:“不活动的内存不再被使用,并被caching到磁盘,它将一直保留在RAM中,直到另一个应用程序需要这个空间为止,如果你(或者你的计算机的一个客户端)返回这个信息,到后来“。 – Mac OS X帮助 Free:实际可用的RAM数量,不包含任何数据。

iPad视网膜模拟器中的CATiledLayer产生较差的性能

我希望也许这只是一个模拟器的问题,但当然,这让我担心,因为我已经提交了我的视网膜能力的应用程序,没有办法testing,直到16日。 我在我的应用程序中实现了一个CATiledLayer来查看非常大的地图。 地图的瓷砖来自互联网,但他们也被caching,所以,通常,他们实际上是直接从设备加载。 在iPad 1和iPad2上,它的作品非常漂亮。 即使是来自互联网,你也几乎看不到在iPad 2上显示的图块。 在iPad模拟器上,它运行的很好。 我的问题是iPad视网膜模拟器。 在视觉上,它看起来没问题。 地图大小合适,并与另一个图层排列起来,用于显示数据叠加层,但是它缓慢地加载INCREDIBLY。 大多数时候我尝试,它不会加载任何瓷砖,直到我开始滚动,然后当它正在加载瓷砖,它可能每秒1,看起来很可怕。 我没有在标准分辨率屏幕上的视网膜上运行不同的代码,所以我希望这只是模拟器的问题…但我仍然担心。 有没有其他人在自己的应用程序中看到这个?

NSFetchedResultsController预先添加一行或一部分

我有一个UITableView填充一个标准的NSFetchedResultsController。 不过,我想预先安排一个行或一个部分(最好行,但要么真的工作得很好)。 我现在可能看到的唯一方法就是在处理NSFetchedResultsController中的数据的部分/行时,手动重写所有的NSIndexPath,以诱使它看到索引0处的部分,并以索引0处的行开始。似乎是一个非常糟糕的想法,很快就会让人困惑,所以我想避免这种情况。 一个很好的例子就是在官方的Twitter应用程序中,当你第一次启动时,我会引导你添加朋友列表中的一些人。 红色部分几乎是我想要实现的,而我假定的黄色部分是来自同一节中的NSFetchedResultsController的结果(尽pipe它们的自定义样式可能是单独的部分)。

在iOS 7中,AVCapture捕获帧速率为60fps

我正在开发一个应用程序,需要尽可能多地捕捉framebuffer。 我已经想出了如何强制iPhone以60 fps捕捉,但是 – (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection 方法每秒仅调用15次,这意味着iPhone会将捕捉输出降级到15 fps。 有没有人遇到这样的问题? 有没有可能增加捕捉帧率? 更新我的代码: camera = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; if([camera isTorchModeSupported:AVCaptureTorchModeOn]) { [camera lockForConfiguration:nil]; camera.torchMode=AVCaptureTorchModeOn; [camera unlockForConfiguration]; } [self configureCameraForHighestFrameRate:camera]; // Create a AVCaptureInput with the camera device NSError *error=nil; AVCaptureInput* cameraInput = [[AVCaptureDeviceInput alloc] initWithDevice:camera error:&error]; if (cameraInput == nil) { NSLog(@"Error to create camera […]