使用Swift绘制折线

我想了解如何使用Swift绘制多段线。 我查看了文档,引用了一些教程,并检查了一些其他的SOpost,但我仍然无法在我的地图上画线。 这是我的代码。 有人告诉我我在这里做错了什么? import UIKit import MapKit class FirstViewController: UIViewController { @IBOutlet weak var map: MKMapView! override func viewDidAppear(animated: Bool) { super.viewDidAppear(animated) let location = CLLocationCoordinate2D( latitude: -73.761105, longitude: 41.017791 ) let span = MKCoordinateSpanMake(0.07, 0.07) let region = MKCoordinateRegion(center: location, span: span) map.setRegion(region, animated: true) let annotation = MKPointAnnotation() annotation.setCoordinate(location) annotation.title = "White […]

iOS上的Dropbox应用程序是否具有URLscheme?

我希望能够在我的应用程序内启动Dropbox应用程序。 因此,我想知道如果Dropbox的应用程序有一个我可以用来调用openURL的URLscheme,除了我不知道这个string应该是什么。 NSURL *myURL = [NSURL URLWithString:@"dropbox://"]; [[UIApplication sharedApplication] openURL:myURL]; 谢谢,

setNeedsDisplay,drawRect或CALayer导致dispatch_continuation_alloc_from_heap malloc内存泄漏iOS

我在应用程序中遇到内存泄漏,似乎来自CALayer。 看起来好像只影响老iPad; 我看到iPad 1和2的问题,但iPad Air没问题。 我有一个iPad 1的崩溃报告,显示我的应用程序由于内存不足而“被抛弃”,这个漏洞是我的主要嫌疑。 背景 在操作期间,setNeedsDisplay每40ms由不同的UIViews上的networking线程不断地调用,以更新它们的视觉效果,参见下面的函数。 – (void)setNeedsRepaint { [self performSelectorOnMainThread:@selector(setNeedsDisplay) withObject:nil waitUntilDone:NO]; } 模拟iPad2并使用分配工具,我发现每次setNeedsDisplay被调用时,malloc 64的引用计数都会永久上升。 负责的库是libdispatch.dylib,调用者是dispatch_continuation_alloc_from_heap。 iPad Air模拟器不显示此问题,在这种情况下,malloc 32引用计数只是暂时上升。 即使在setNeedsDisplay来自GUI线程并且不通过performSelectorOnMainThread调度的情况下,我也看到malloc 64引用计数上升。 以下是分配工具的屏幕截图。 标记为3的malloc是有问题的泄漏。 标记为1&2的malloc泄漏得慢得多,但仍然是一个小问题。 采取的步骤 为了排除drawRect中的内存泄漏,我注释了大括号之间的所有代码,但泄漏的内存仍然继续积累。 如果我不重写drawRect方法,我不会看到泄漏,但我需要为了绘制和更新我的视图。 我也没有看到它,如果setNeedsDisplay不被调用,我可以调用一个虚拟函数,而不是内存泄漏performSelectorOnMainThread。 我已经尝试使用块和dispatch_async而不是performSelectorOnMainThread在GUI线程上运行setNeedsDisplay。 我也尝试减less应用程序,以便setNeedsDisplay只能在一个视图上重复调用。 然后删除所有指向该视图的指针,以便ARC清理它,希望stream浪的malloc可能会被清理干净。 我试着直接设置CALayer的内容而不是调用setNeedsDisplay。 它呈现,但malloc计数完全相同的方式上升。 self.layer.contents = (__bridge id) _dummyCGImageRef; 读完这个之后,我认为泄漏可能是由于队列变得臃肿。 然而,我的函数调用速度减慢了10倍,只是使内存泄漏增长了10倍。 结论 泄漏似乎绑定到CALayer,而不是调度队列和performSelectorOnMainThread。 看起来这个问题在以后的iPad中已经修复,但是我仍然需要一个解决旧版本的解决方法。 问题 有没有人有任何提示debugging呢? 另一种仪器是否更适合find确切的原因? 这是模拟器的一个特点,我看到的不是我的应用程序抛弃的原因吗? 任何人都知道这是什么原因? 这是一个历史性的bug,因为它不影响iPad Air? 我有一个子类化的技巧,我可以用CALayer来防止后备存储分配内存,或另一种方式我更新我的视觉视觉? […]

从iOS应用程序截图 – 模拟显示logging(在内部查询)

我需要创build一个iOS应用程序,其中可以截取其他应用程序,video等作为实验的一部分。 我打开使用私人API的,因为我不会将应用程序发布到应用程序商店。 我可以成功地使用方法GetUIScreenImage()拍摄当前屏幕(应用程序屏幕)的快照。 但是,由于沙箱限制,我无法在后台截取屏幕截图。 我得到的错误 – “不能调用CreateUIScreenImage()而应用程序在后台”。 我提到了这篇文章 – iOS应用程序显示logging器如何在不使用私有API的情况下logging屏幕? 其中build议使用IOMobileFramebuffer和IOSurface来绕过沙盒限制,也可以使用这个链接 – http://www.iphonesheep.com/2009/11/25/iphone%E2%80%99s-framebuffer-secrets-revealed/ 。 但是我无法获得创build和转移表面的stream程。 任何有关这个话题的帮助,高度赞赏。 另外,有没有办法在越狱设备的后台调用UIGetScreenImage()? 更新: 我能够抓住主屏幕表面,并把它放在应用层,但我的用例是能够打开其他应用程序,并能够通过我创build的应用程序来logging它们。 然而,粘贴在我的应用层上的表面是静态的。 编辑 这是我的理解 – 附加到主显示图层的主屏幕表面需要放在当前图层上。 这样做后,我应该能够浏览其他应用程序,从刚刚粘贴的表面打开它们。 这里是代码(它将主屏幕表面放在应用层的顶部,但我无法使用该表面,即打开应用程序等): IOMobileFramebufferConnection connect; kern_return_t result; CoreSurfacebufferRef screenSurface = NULL; io_service_t framebufferService = IOServiceGetMatchingService (kIOMasterPortDefault, IOServiceMatching ("AppleH1CLCD")); if(!framebufferService) io_service_t framebufferService = IOServiceGetMatchingService (kIOMasterPortDefault, IOServiceMatching ("AppleM2CLCD")); if(!framebufferService) io_service_t framebufferService = IOServiceGetMatchingService (kIOMasterPortDefault, […]

无法在ios中使用Google map sdk

我正在开发一个简单的iOS应用程序,并将其集成到Google地图中。 但没有得到任何结果。 我已经使用这个步骤 第一步 :我已经从这个链接sdk ios下载了Google Maps Mobile SDK 第2步:在Google API控制台中创build一个API项目。 第3步:selectAPI项目中的“服务”窗格,然后启用Google Maps SDK for iOS。 这显示了Google地图服务条款。 获取有效状态Google API控制台。 步骤4:i在控制台中select“API访问”窗格,然后单击“创build新的iOS密钥”。 然后我像这样在AppDelegate.m中添加了API Key #import "AppDelegate.h" #import <GoogleMapsM4B/GoogleMaps.h> @interface AppDelegate () @end @implementation AppDelegate – (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. NSLog(@"Current identifier: %@", [[NSBundle mainBundle] bundleIdentifier]); [GMSServices provideAPIKey:@"AIzaSTyurcyzpvoRv3gCPJRiw7Dc6dXkTMfOI2w"]; return […]

AVPlayerViewController使用纯audioAVPlayer

刚开始与AVKit,我想播放一些audio。 在Mastering Modern Media Playback中使用新的AVPlayerViewController会很好,所以我有一个现成的播放/暂停/searchUI。 我基本上有一个容器视图的故事板,有一个embedded到AVPlayerViewController的segue。 然后我使用: override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { if (segue.identifier == "embedAudio") { var playerViewController:AVPlayerViewController = segue.destinationViewController as AVPlayerViewController playerViewController.player = AVPlayer(URL: NSURL(string: "http://dts.podtrac.com/redirect.mp3/files.serialpodcast.org/sites/default/files/podcast/1420057326/serial-s01-e01.mp3")) } } 它embedded很好,并播放,但它有一个大的黑色的QuickTime符号video将是。 我想知道是否有办法让它看起来更像音乐或播客应用程序。

用os版本查找不支持的apis

我已经开发和应用iPhone。 它在os4上正常工作,但在os3.1上不起作用。 其实有效,但也有一些问题; 在启动屏幕后出现一个屏幕。 当我离开应用程序时,我可以看到应用程序已成功打开,但只是在退出时看到。 所以我想知道是否有一个工具,说哪个apis有os3.1的问题? 所以我有机会取代它们。

自动将属性值从一个对象复制到另一个不同types的对象,但协议相同(Objective-C)

我有两个具有同一组属性的类,在协议中使用@property指令声明,它们都执行。 现在我想知道是否可以使用第二个类的实例中的值自动填充第一个类的实例(反之亦然)。 我想这种方法是健壮的,所以如果我改变协议中声明的属性,将不需要在复制方法中添加额外的代码。

格式string不是一个文字string(可能不安全)警告

可能重复: 警告:“格式不是string文字和格式参数” 我有我的应用程序中的开发人员工作的以下代码行。 我正在学习Objective C的基础知识,当我更新应用程序与iPhone 5兼容时,我看到以下警告(我没有更改他的代码)Format String不是一个文字string(可能不安全)。 代码如下: self.progressHud.labelText = [NSString stringWithFormat:message]; 我不知道这意味着什么,也不想上传任何可能是安全问题或被Apple拒绝的东西。 任何和所有的帮助是从你们所有的赞赏。

GPUImageMovie在应用filter时暂停

我使用Brad Larson伟大的图书馆GPUImage为我的应用程序。 目前我陷入了一个问题。 我的应用程序捕捉10秒的video,然后允许filter应用。 在GPUImageMovie应用filters时,我无法暂停播放并应用新的filter以便video将从头开始连续播放。 我在这里看到一个开放的github问题。 如果有人遇到类似的问题,并find解决办法,请张贴您的答案。 提前致谢。