[FIXED] FSInteractiveMap Objective-C zu Swfit übersetzen

Ausgabe

Ich möchte FSInteractiveMap in Swift verwenden, aber Dokumentationen sind nur Objective-C und ich kann Click Handler nicht in Swift übersetzen.

 NSDictionary* data = @{    @"asia" : @12,
                    @"australia" : @2,
                    @"north_america" : @5,
                    @"south_america" : @14,
                    @"africa" : @5,
                    @"europe" : @20
                  };

FSInteractiveMapView* map = [[FSInteractiveMapView alloc] initWithFrame:self.view.frame];

[map loadMap:@"world-continents-low" withData:data colorAxis:@[[UIColor lightGrayColor], [UIColor darkGrayColor]]];

in schneller Zusammenarbeit mit:

    let map: FSInteractiveMapView = FSInteractiveMapView()
    map.frame = self.view.frame
    var mapData = [String: Int]()
    mapData["IR-01"] = 0
    mapData["IR-02"] = 10
    var mapColors = [UIColor]()
    mapColors.append(UIColor(red:0.26, green:0.112, blue:0.0, alpha:1.0))
    mapColors.append(UIColor(red:0.45, green:0.132, blue:0.0, alpha:1.0))


    map.loadMap("iranHigh", withData:mapData, colorAxis:mapColors)
    view.addSubview(map)
    view.setNeedsDisplay()

Es funktioniert korrekt, aber ich kann den Click-Handler nicht hinzufügen

Hier ist die Dokumentation in Objective-C:

FSInteractiveMapView* map = [[FSInteractiveMapView alloc] initWithFrame:CGRectMake(16, 96, self.view.frame.size.width - 32, 500)];
[map loadMap:@"usa-low" withColors:nil];

[map setClickHandler:^(NSString* identifier, CAShapeLayer* layer) {
    if(_oldClickedLayer) {
        _oldClickedLayer.zPosition = 0;
        _oldClickedLayer.shadowOpacity = 0;
    }

_oldClickedLayer = layer;

// We set a simple effect on the layer clicked to highlight it
layer.zPosition = 10;
layer.shadowOpacity = 0.5;
layer.shadowColor = [UIColor blackColor].CGColor;
layer.shadowRadius = 5;
layer.shadowOffset = CGSizeMake(0, 0);
}];

ODER:

[map setClickHandler:^(NSString* identifier, CAShapeLayer* layer) {
self.detailDescriptionLabel.text = [NSString stringWithFormat:@"Continent clicked: %@", identifier];}];

Wie kann ich das in Swift machen?

Lösung

etwas Code hinzufügen, sieht so aus

    override func viewDidLoad() {
        super.viewDidLoad()

        let map: FSInteractiveMapView = FSInteractiveMapView()
        weak var oldClickedLayer = CAShapeLayer()

        var mapData              = [String: Int]()
        mapData["asia"]          = 12
        mapData["australia"]     = 2
        mapData["north_america"] = 5
        mapData["south_america"] = 14
        mapData["africa"]        = 5
        mapData["europe"]        = 20

        var mapColors = [UIColor]()
        mapColors.append(UIColor.lightGray)
        mapColors.append(UIColor.darkGray)
        map.frame = self.view.frame
        map.clickHandler = {(identifier: String? , _ layer: CAShapeLayer?) -> Void in
            if (oldClickedLayer != nil) {
                oldClickedLayer?.zPosition = 0
                oldClickedLayer?.shadowOpacity = 0
            }
            oldClickedLayer = layer
            // We set a simple effect on the layer clicked to highlight it
            layer?.zPosition = 10
            layer?.shadowOpacity = 0.5
            layer?.shadowColor = UIColor.black.cgColor
            layer?.shadowRadius = 5
            layer?.shadowOffset = CGSize(width: 0, height: 0)

            print("clicked")
        }
        let mapName: String! = String("world-continents-low")
        map.loadMap(mapName, withData:mapData, colorAxis:mapColors)

        view.addSubview(map)
        view.setNeedsDisplay()

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

das hat bei mir funktioniert. Vergessen Sie nicht, die Bibliothek zu importieren


Beantwortet von –
BatyrCan


Antwort geprüft von –
Gilberto Lyons (FixError Admin)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like

[FIXED] openURL: in iOS 10 veraltet

Ausgabe Apple mit iOS 10 ist veraltet openURL: for openURL:option:completionHandler Wenn ich: [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"https://www.google.com"]]; Wie wird…