我在使用MKMapView和MKMapCamera时注意到了奇怪的行为.我需要实现一些Apple Maps应用程序的标准行为.基本上,我需要的是当Map View的用户跟踪模式设置为MKUserTrackingModeFollowWithHeading时能够在2D和3D模式之间切换.
目前,我的解决方案在userTrackingMode设置为MKUserTrackingModeNone时工作正常,但它在其他模式下执行奇怪的动画(无论我使用setCamera:动画:是或否)都会发生这种情况.当我在设置new之前和之后记录相机参数时,唯一的区别是我的音高变化.
另一个问题是改变摄像机的高度以编程方式放大或缩小.我试图在IBAction方法中使用捏合或缩小手势来模仿缩放.在followWithHeadingMode中,地图始终返回"默认"缩放级别(摄像机的高度),而在其他模式下效果很好.
我启动了示例项目来检查发生了什么,这是我的单视图应用程序的视图控制器,带有地图视图,其中出现问题:
#import "CCViewController.h"
@interface CCViewController ()
@end
@implementation CCViewController
- (void)viewDidLoad{
[super viewDidLoad];
}
- (void)setUpMap{
[self.mapView setShowsUserLocation: YES];
}
- (void)viewDidAppear:(BOOL)animated{
[self setUpMap];
}
- (IBAction)mapModeSwitchClicked:(id)sender {
MKMapCamera *newCamera = [MKMapCamera camera];
newCamera.centerCoordinate = self.mapView.camera.centerCoordinate;
newCamera.heading = self.mapView.camera.heading;
newCamera.altitude = self.mapView.camera.altitude;
if(!self.mapView.camera.pitch){
newCamera.pitch = 50;
self.mapModeSwitch.title = @"2D";
}
else{
newCamera.pitch = 0;
self.mapModeSwitch.title = @"3D";
}
[self.mapView setCamera:newCamera animated:YES];
}
- (IBAction)locateMeButtonClicked:(id)sender {
if(self.mapView.userTrackingMode != MKUserTrackingModeFollowWithHeading)
[self.mapView …Run Code Online (Sandbox Code Playgroud) 在项目中我正在研究我正在使用单例类来处理所有与蓝牙相关的任务.它的CBCentralManager对象处理与多个外围设备的连接.当CBPeripherals发现时,我让用户选择外围设备并连接到它.建立连接后,他/她可以选择另一个可用设备,因此按顺序连接.
但是当涉及到检索连接时,我得到了一系列检索到的外围设备.检索多个外围设备的最佳做法是什么?是否可以立即创建到外设的多个连接请求,还是应该按顺序执行?
现在我正在循环检索外围设备并尝试与它们连接而无需等待.它工作,但它需要一些时间,虽然它可能是我连接到我的可用硬件的问题.
当我触发方法时retrievePeripheralsWithIdentifiers:它没有给我任何委托回调,所以我正在检索centralManager:didDisconnectPeripheral:error:方法,我在哪里做
NSArray *retrieved = [self.centralMgr retrievePeripheralsWithIdentifiers:identifiers];
然后遍历检索到的对象.
它有效,但这是正确的方法吗?