我有一个可能有数百个多边形的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) 我有一个应用程序让你用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)
这仍然无法解决我的问题,但这是一个有趣的发现.
出于某种原因,不知道到底从什么时候(这是不是总是这样),但是,当我想写下的NSDictionary,高达NSDI这是在暗示我NSDirectoryEnumerationSkipsSubdirectoryDescendants.
在什么时候设计算法肯定会使用一些NSDictionaries,Apple的工程师认为"哇,这真的很有用!我经常使用NSDirectoryEnumerationSkipsSubdirectoryDescendants!"?
有没有办法让它恢复一些理智?
为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添加硬编码的例外?
我创建了以下使用 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)