TipUIView
A user interface element that represents a tip in UIKit applications.
Declaration
@MainActor @objc @preconcurrency final class TipUIViewOverview
Use this view to create a tip you want to display and lay out as a UIView. To configure the content and appearance of your view, use the init(_:arrowEdge:actionHandler:) function and provide a tip along with an optional arrow edge and optional action. Set the background color of your tip view using backgroundColor.
Adding and removing TipUIView from your app is done by listening to a tip’s shouldDisplayUpdates or statusUpdates.
import TipKit
import UIKit
struct CatTracksFeatureTip: Tip {
var title: Text {
Text("Sample tip title")
}
var message: Text? {
Text("Sample tip message")
}
var image: Image? {
Image(systemName: "globe")
}
}
class CatTracksViewController: UIViewController {
private var catTracksFeatureTip = CatTracksFeatureTip()
private var tipObservationTask: Task<Void, Never>?
private weak var tipView: TipUIView?
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
tipObservationTask = tipObservationTask ?? Task { @MainActor in
for await shouldDisplay in catTracksFeatureTip.shouldDisplayUpdates {
if shouldDisplay {
let tipHostingView = TipUIView(catTracksFeatureTip)
tipHostingView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(tipHostingView)
view.addConstraints([
tipHostingView.centerYAnchor.constraint(equalTo: view.centerYAnchor),
tipHostingView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 20.0),
tipHostingView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -20.0)
])
tipView = tipHostingView
}
else {
tipView?.removeFromSuperview()
tipView = nil
}
}
}
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
tipObservationTask?.cancel()
tipObservationTask = nil
}
}