Commit 059ce10b authored by Qiu Xiang's avatar Qiu Xiang
Browse files

实现 iOS circle 接口

parent fc80b021
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -16,7 +16,7 @@ internal class AMapCircleManager : ViewGroupManager<AMapCircle>() {
        return AMapCircle(reactContext)
    }

    @ReactProp(name = "center")
    @ReactProp(name = "coordinate")
    fun setCoordinate(circle: AMapCircle, coordinate: ReadableMap) {
        circle.center = LatLng(
                coordinate.getDouble("latitude"),
+7 −3
Original line number Diff line number Diff line
import React, {PropTypes, Component} from 'react'
import {requireNativeComponent, View, PixelRatio} from 'react-native'
import {requireNativeComponent, View, PixelRatio, Platform} from 'react-native'
import {LatLng} from './PropTypes'

class Circle extends Component {
@@ -9,7 +9,7 @@ class Circle extends Component {
    /**
     * 圆点
     */
    center: LatLng.isRequired,
    coordinate: LatLng.isRequired,

    /**
     * 半径(米)
@@ -25,7 +25,11 @@ class Circle extends Component {
  render() {
    const props = {
      ...this.props,
      ...Platform.select({
        android: {
          strokeWidth: PixelRatio.getPixelSizeForLayoutSize(this.props.strokeWidth),
        },
      }),
    }
    return <AMapCircle {...props}/>
  }

ios/AMapCircle.h

0 → 100644
+11 −0
Original line number Diff line number Diff line
#import <MAMapKit/MAMapKit.h>
#import "AMapModel.h"

#pragma ide diagnostic ignored "OCUnusedPropertyInspection"

@interface AMapCircle : AMapModel

@property(nonatomic, readonly) CLLocationCoordinate2D coordinate;
@property(nonatomic, readonly) MAMapRect boundingMapRect;

@end

ios/AMapCircle.m

0 → 100644
+60 −0
Original line number Diff line number Diff line
#import "AMapCircle.h"

#pragma ide diagnostic ignored "OCUnusedMethodInspection"

@implementation AMapCircle {
    MACircle *_circle;
    MACircleRenderer *_renderer;
    CGFloat _strokeWidth;
    UIColor *_strokeColor;
    UIColor *_fillColor;
    CLLocationCoordinate2D _coordinate;
    CLLocationDistance _radius;
}

- (void)setCoordinate:(CLLocationCoordinate2D)coordinate {
    _coordinate = coordinate;
    _circle.coordinate = coordinate;
}

- (void)setRadius:(CLLocationDistance)radius {
    _radius = radius;
    _circle.radius = radius;
}

- (void)setStrokeWidth:(CGFloat)strokeWidth {
    _strokeWidth = strokeWidth;
    _renderer.lineWidth = strokeWidth;
}

- (void)setStrokeColor:(UIColor *)strokeColor {
    _strokeColor = strokeColor;
    _renderer.strokeColor = strokeColor;
}

- (void)setFillColor:(UIColor *)fillColor {
    _fillColor = fillColor;
    _renderer.fillColor = fillColor;
}

- (CLLocationCoordinate2D)coordinate {
    return _circle.coordinate;
}

- (MAMapRect)boundingMapRect {
    return _circle.boundingMapRect;
}

- (MAOverlayRenderer *)renderer {
    if (_strokeColor == nil) {
        _strokeColor = UIColor.blackColor;
    }
    _circle = [MACircle circleWithCenterCoordinate:_coordinate radius:_radius];
    _renderer = [[MACircleRenderer alloc] initWithCircle:_circle];
    _renderer.lineWidth = _strokeWidth;
    _renderer.strokeColor = _strokeColor;
    _renderer.fillColor = _fillColor;
    return _renderer;
}

@end
+25 −0
Original line number Diff line number Diff line
#import <MAMapKit/MAMapView.h>
#import <React/RCTViewManager.h>
#import "AMapCircle.h"

#pragma ide diagnostic ignored "OCUnusedClassInspection"

@interface AMapCircleManager : RCTViewManager <MAMapViewDelegate>
@end

@implementation AMapCircleManager {
}

RCT_EXPORT_MODULE()

- (UIView *)view {
    return [AMapCircle new];
}

RCT_EXPORT_VIEW_PROPERTY(coordinate, CLLocationCoordinate2D)
RCT_EXPORT_VIEW_PROPERTY(radius, CLLocationDistance)
RCT_EXPORT_VIEW_PROPERTY(strokeWidth, CGFloat)
RCT_EXPORT_VIEW_PROPERTY(strokeColor, UIColor)
RCT_EXPORT_VIEW_PROPERTY(fillColor, UIColor)

@end