1

IBAction ボタンを使用してマップ レイヤーをオンにしています。このコードは、ボタンがタップされたときにオンにします。

- (IBAction)lightingLayer:(id)sender {

[_mapView addTileSource:[[RMMapBoxSource alloc] initWithMapID:@"MapID"]];

}

ここで、ユーザーが一度タップするとレイヤーがオンになるように調整したいと思います。もう一度タップすると、オンになります。同様の例からコードを借りて試してみましたが、うまくいきません。

- (IBAction)lightingLayer:(id)sender {

_Bool *isON = NULL; 

isON = !isON;

if(isON) {

[_mapView addTileSource:[[RMMapBoxSource alloc] initWithMapID:@"MapID"]];

} else {

[_mapView removeTileSource:[[RMMapBoxSource alloc] initWithMapID:@"MapID"]];

}

これは、int から bool を代入する、互換性のない整数からポインターへの変換にフラグを立てます。誰かが私の目標を達成するのに役立つ簡単なコードを提供できますか? お時間をいただきありがとうございます。

4

3 に答える 3

1

このエラーは、ブール値をポインターに割り当てているためです。ポインタは、メモリ位置を 16 進数として保持する整数値に他なりません。

しかし、実際には、目的を達成するためにポインターは必要ありません。プロパティを使用してこのブール値を格納し、トグル機能を作成するだけです。

このプライベート プロパティを宣言します。

@property (strong, assign) BOOL isChecked; 

そしてあなたの行動で:

- (IBAction)lightingLayer:(id)sender {

    self.isChecked = !self.isChecked;

    if(self.isChecked) {

        [_mapView addTileSource:[[RMMapBoxSource alloc] initWithMapID:@"MapID"]];

    } else {

         [_mapView removeTileSource:[[RMMapBoxSource alloc] initWithMapID:@"MapID"]];
    }
}

Ps: ここでは、現在発生しているエラーを説明することにのみ焦点を当てました。このタイルの追加/削除ロジックもおそらく間違っています。追加して後で削除するには、同じ参照を保存する必要があると思います。

于 2013-08-23T02:54:28.333 に答える
1

こうすれば

BOOL isON;
- (IBAction)lightingLayer:(id)sender {
if(isON) {

    [_mapView addTileSource:[[RMMapBoxSource alloc] initWithMapID:@"MapID"]];
    isON=NO;

} else {

    [_mapView removeTileSource:[[RMMapBoxSource alloc] initWithMapID:@"MapID"]];
    isON=YES;

}
于 2013-08-23T12:34:03.813 に答える
0

これは私が行ったものです。ルーカスの答えからのわずかな調整です。これにより、マップのオンとオフが交互に切り替わります。回答ありがとうございます。

//.h

@property BOOL *isChecked;


//.m

self.isChecked = !self.isChecked;

if((self.isChecked)) {

[_mapView addTileSource:onlineSource atIndex:1];

} else {

[_mapView setHidden:YES forTileSourceAtIndex:1  ];
于 2013-09-02T20:46:50.650 に答える