代码地址如下:
http://www.demodashi.com/demo/11107.html高仿系统指南针,方向数据是地磁航向数据,有定位地理位置信息和地磁方向信息,可以和系统的指南针对比看一看。
一、运行效果预览
二、实现过程
1.继承于UIView创建一个带刻度标注的视图ScaleView,利用UIBezierPath和CAShapeLayer、UILabel,默认0刻度(北)在最上方。
//化刻度表
- (void)paintingScale{
CGFloat perAngle = M_PI/(90);
NSArray *array = @[@"北",@"东",@"南",@"西"];
//画圆环,每隔2°画一个弧线,总共180条
for (int i = 0; i < 180; i++) {
CGFloat startAngle = (-(M_PI_2+M_PI/180/2)+perAngle*i);
CGFloat endAngle = startAngle+perAngle/2;
UIBezierPath *bezPath = [UIBezierPath bezierPathWithArcCenter:CGPointMake(self.frame.size.width/2, self.frame.size.height/2)
radius:(self.frame.size.width/2 - 50)
startAngle:startAngle
endAngle:endAngle
clockwise:YES];
CAShapeLayer *shapeLayer = [CAShapeLayer layer];
//每隔30°画一个白条刻度
if (i%15 == 0) {
shapeLayer.strokeColor = [[UIColor whiteColor] CGColor];
shapeLayer.lineWidth = 20;
}else{
shapeLayer.strokeColor = [[UIColor grayColor] CGColor];
shapeLayer.lineWidth = 10;
}
shapeLayer.path = bezPath.CGPath;
shapeLayer.fillColor = [UIColor clearColor].CGColor;
[_backgroundView.layer addSublayer:shapeLayer];
//每隔30°画一个刻度的标注 0 30 60...
if (i % 15 == 0){
NSString *tickText = [NSString stringWithFormat:@"%d",i * 2];
CGFloat textAngel = startAngle+(