获得加速度传感器读数:
1. UIAccelerometer *accelerometer = [UIAccelerometer shareAccelerometer]; // 单例
2. accelerometer.delegate = self;
3. accelerometer.updateInterval = 1.0f / 10.0f; // 传感器更新频率,普通游戏10~30HZ,虚拟现实类游戏,30~60HZ
4. accelerometer.x, accelerometer.y, accelerometer.z // 传感器读数
若不想再接受传感器读数,可将代理设置为nil
1. [UIAccelerometer shareAccelerometer].delegate = nil;
2.
3. #define alpha 0.05
4. // 获得重力引起的加速度读数:
5. - (void)accelerometer: (UIAccelerometer *)accelerometer didAccelerate: (UIAcceleration *)acceleration
6. {
7. // 简单低通滤波器
8. accelX = (acceleration.x * alpha) + (accelX) * (1.0 - alpha);
9. accelY = (acceleration.y * alpha) + (accelY) * (1.0 - alpha);
10. accelZ = (acceleration.z * alpha) + (accelZ) * (1.0 - alpha);
11.}
12.
13.// 获得动作引起的加速度读数:
14.- (void)accelerometer: (UIAccelerometer *)accelerometer didAccelerate: (UIAcceleration *)acceleration
15.{
16. // 减去低通滤波输出,得到高通滤波输出
17. accelX = acceleration.x - ((acceleration.x * alpha) + (accelX) * (1.0 - alpha));
18. accelY = acceleration.y - ((acceleration.y * alpha) + (accelY) * (1.0 - alpha));
19. accelZ = acceleration.z - ((acceleration.z * alpha) + (accelZ) * (1.0 - alpha));
20.}
十六.地图与连接服务器
[1] 添加框架MapKit.framework。使用MKMapView来呈现地图。注意应当直接使用此类,而不是继承之。如果希望在MKMapView类之上添加功能,可以使用MKMapViewDelegate协议。
初始化:
1. MKMapView *mapView = [MKMapView alloc] initWithFrame: rect];
初始化之后并不直接显示,还需要指定显示的地图区域:
1. CLLocationCoordinate2D coordinate;
2. coordinate.latitude = latitudeValue; // 纬度
3. coordinate.longtitude = longtitudeValue; // 精度
4. mapView.region = MKCoordinateRegionMakeWithDistance(coordinate, width, height); // 指定显示区域,width和height单位都是米
之后可以通过addSubview添加地图。
属性:showsUserLocation-为YES,系统会持续跟踪用户的位置
userLocationVisible-为YES,将显示用户所在位置
显示地图之后,常常希望在地图上添加标注,这需要创建一个类,并实现MKAnnotation协议,这个类叫做标注对象。标注对象往往实现setCoordinate:方法来设置其坐标。在地图视图上,可以设置标注对象的坐标,然后添加进去,这样地图上就会出现一个标注。代理方法title 和subtitle能够在标注上显示标题和副标题。
1. // 初始化
2. mapView = [MKMapView alloc] initWithFrame: CGRectMake(100, 100, 550, 700)];
3. mapView.showsUserLocation = TRUE;
4. mapView.mapType = MKMapTypeStandard;
5. mapView.delegate = self;
6. // 设置坐标
7. CLLocationCoordinate2D coordinate;
8. coordinate.latitude = 37.31;
9. coordinate.longtitude = -122.03;
10. mapView.region = MKCoordinateRegionMakeWithDistance(coordinate, 4000, 6000); // 4000米宽,6000米高的区域
11. [self.view insertSubview: mapView atIndex: 0];