Group a collection of layers together and toggle their visibility as a group.
Use case
Group layers communicate to the user that layers are related and can be managed together. In a land development project, you might group layers according to the phase of development.
How to use the sample
The layers in the map will be displayed in a table of contents. For project area group layers, toggle the switch next to a layer's name. For the buildings group layers, tap the cell to change its visibility. Turning a group layer's visibility off will override the visibility of its child layers.
How it works
- Create an
AGSGroupLayer
object. - Add a child layer to the group layer's layers collection.
- Set the group layer's
groupVisibilityMode
to change its behavior:independent
allows each sublayer to change its visibility independently.inherited
treats the group layer as if it is one merged layer.exclusive
allows only one sublayer to be visible at a time.
- To toggle the visibility of the group, simply change the group layer's
isVisible
property.
Relevant API
- AGSGroupLayer
Additional information
The full extent of a group layer may change when child layers are added/removed. Group layers do not have a spatial reference, but the full extent will have the spatial reference of the first child layer.
Group layers can be saved to web scenes. In web maps, group layers will be flattened in the web map's operational layers.
Tags
group layer, layers
Sample Code
// Copyright 2019 Esri.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import UIKit
final class GroupLayersSectionView: UITableViewHeaderFooterView {
@IBOutlet var layerNameLabel: UILabel!
@IBOutlet var layerVisibilitySwitch: UISwitch?
weak var delegate: GroupLayersSectionViewDelegate?
static let reuseIdentifier = "\(GroupLayersSectionView.self)"
static var nib: UINib {
return UINib(nibName: String(describing: self), bundle: nil)
}
@IBAction func toggleSwitch(_ sender: UISwitch) {
delegate?.didToggleSwitch(self, isOn: sender.isOn)
}
}
protocol GroupLayersSectionViewDelegate: AnyObject {
func didToggleSwitch(_ sectionView: GroupLayersSectionView, isOn: Bool)
}