小编man*_*sta的帖子

在iOS7中检测MKOverlay上的触摸(MKOverlayRenderer)

我有一个可能有数百个多边形的MKMapView.iOS7上假设使用MKPolygon和MKPolygonRenderer.

我需要的是一种对用户触摸其中一个多边形的方式.它们代表地图上具有一定人口密度的区域.在iOS6上,MKOverlay被绘制为MKOverlayViews,因此触摸检测更直接.现在使用渲染器我真的不明白这是怎么做的.

我不确定这会有所帮助甚至是相关的,但作为参考,我会发布一些代码:

这会使用mapData将所有MKOverlay添加到MKMapView.

-(void)drawPolygons{
    self.polygonsInfo = [NSMutableDictionary dictionary];
    NSArray *polygons = [self.mapData valueForKeyPath:@"polygons"];

    for(NSDictionary *polygonInfo in polygons){
        NSArray *polygonPoints = [polygonInfo objectForKey:@"boundary"];
        int numberOfPoints = [polygonPoints count];

        CLLocationCoordinate2D *coordinates = malloc(numberOfPoints * sizeof(CLLocationCoordinate2D));
        for (int i = 0; i < numberOfPoints; i++){
            NSDictionary *pointInfo = [polygonPoints objectAtIndex:i];

            CLLocationCoordinate2D point;
            point.latitude = [[pointInfo objectForKey:@"lat"] floatValue];
            point.longitude = [[pointInfo objectForKey:@"long"] floatValue];

            coordinates[i] = point;
        }

        MKPolygon *polygon = [MKPolygon polygonWithCoordinates:coordinates count:numberOfPoints];
        polygon.title = [polygonInfo objectForKey:@"name"];
        free(coordinates);
        [self.mapView addOverlay:polygon];
        [self.polygonsInfo setObject:polygonInfo forKey:polygon.title]; …
Run Code Online (Sandbox Code Playgroud)

touch mapkit mkmapview ios mkoverlay

24
推荐指数
3
解决办法
7309
查看次数

在iPhone上"没有足够的可用存储空间......"时,Camera App不会被忽略

我有一个应用程序让你用iphone相机拍照.一切都像魅力一样,但是在新设备上进行测试时,没有足够的存储空间可用,相机应用程序并没有消失.

所以基本上我用源摄像头打开图像选择器,我得到一个弹出窗口,上面写着"没有足够的可用存储空间来拍摄照片......"然后当我按下OK时,我在相机应用程序中,关闭了快门,"拍照"和"取消"按钮都显示为灰色.从这一点来说,我唯一可以做的就是杀死应用程序,因为没有办法离开这个屏幕.

在我的代码中,我用相似的东西调用相机:

UIImagePickerController * photoPicker= [[UIImagePickerController alloc] init];
photoPicker.delegate = self;
photoPicker.sourceType = UIImagePickerControllerSourceTypeCamera;
if ([UIImagePickerController isSourceTypeAvailable:photoPicker.sourceType]) {
    [self presentModalViewController:photoPicker animated:YES];
}
Run Code Online (Sandbox Code Playgroud)

调用它的对象当然是UIImagePickerControllerDelegate,我实现了两个委托方法(都正确响应成功和取消事件):

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info;
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker;
Run Code Online (Sandbox Code Playgroud)

这种"无空间可用"行为不会落在任何委托方法上,因此我无法以编程方式关闭相机应用程序.

有什么想法吗?

编辑:

当试图在相机不可用的模拟器中运行应用程序时,我注意到应用程序崩溃,因为该源不可用.我发现,即使在调用控制器之前,简单地将不可用的sourceType分配给photoPicker也会使应用程序崩溃,因此我将代码更改为以下内容:

UIImagePickerController * photoPicker= [[UIImagePickerController alloc] init];
photoPicker.delegate = self;
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
    photoPicker.sourceType = UIImagePickerControllerSourceTypeCamera;
}else{
    return;
}
[self presentModalViewController:photoPicker animated:YES];
Run Code Online (Sandbox Code Playgroud)

这仍然无法解决我的问题,但这是一个有趣的发现.

camera objective-c ios

7
推荐指数
1
解决办法
890
查看次数

有没有办法改善Xcode的代码完成?

出于某种原因,不知道到底从什么时候(这是不是总是这样),但是,当我想写下的NSDictionary,高达NSDI这是在暗示我NSDirectoryEnumerationSkipsSubdirectoryDe​​scendants.

在什么时候设计算法肯定会使用一些NSDictionaries,Apple的工程师认为"哇,这真的很有用!我经常使用NSDirectoryEnumerationSkipsSubdirectoryDe​​scendants!"?

有没有办法让它恢复一些理智?

xcode code-completion

4
推荐指数
1
解决办法
243
查看次数

iPhone 6 Plus上的UI元素不会水平填充整个屏幕

为iPhone 6 Plus开发时(所有其他设备不受影响).如果您有一个UI元素,假设从一端到另一端水平填充屏幕,则前导和尾随约束通常为-16,因为0假定距离边距为16点.

这在故事板和除iPhone 6 Plus(物理设备和模拟器)之外的所有设备上看起来都很好.

正如您在此处所看到的,我在故事板上对此测试视图的定义如下:

在此输入图像描述

在iPhone 6 Plus上,这是我得到的:

在此输入图像描述

这个黑色视图左右有明显的非填充边框.我做了一些测试,将约束设置为-19和-20,以查看是否填充了空格:

在此输入图像描述

这就是它的样子:

在此输入图像描述

在左边,约束是-20没有边框,在右边约束是-19,有一个像素边框.

我的结论是iPhone 6 Plus上的0点距离边距20点,而不是所有其他设备的16点.这不是故意的,它显然是一个iOS错误.

有人遇到过这个问题吗?是否有解决方法使这一点保持一致,以便我不必为iPhone 6 Plus添加硬编码的例外?

iphone ios uistoryboard iphone-6-plus

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

如何使用 pygame.mixer 重复播放音乐?

我创建了以下使用 pygame.mixer 播放 mp3 音乐的代码。然而,音乐不会重复。关于我如何制作它以便音乐重复播放的任何想法?这是代码:

playlist = list()
playlist.append ( "put music here.mp3" )
playlist.append ( "put music here.mp3" )

pygame.mixer.music.load ( playlist.pop() )  
pygame.mixer.music.queue ( playlist.pop() )
pygame.mixer.music.set_endevent ( pygame.USEREVENT )  
pygame.mixer.music.play()           

a = 0

running = True
while a == 0:
   while running:
      for event in pygame.event.get():
         if event.type == pygame.USEREVENT:    
            if len ( playlist ) >1:       
               pygame.mixer.music.queue ( playlist.pop() )`
Run Code Online (Sandbox Code Playgroud)

python pygame

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