Just like a keyboard, the mouse is a toolset that you may not have encountered if you’ve focused solely on iOS development. Catalyst makes working with the mouse easy since it provides a familiar pattern, and it gives you a great amount of control in the process.
In this chapter, you’ll learn to implement PointerStyleProvider and UIHoverGestureRecognizer to show a shadow effect or to change the default mouse pointer, when hovering over a diary entry in the sample app. You’ll also learn to accessorize your mouse pointers using UIPointAccessory that’s new in iOS 15. You’ll look at the differences between iOS/iPadOS and touch targets in macOS.
Getting Started
Open the starter project for this chapter. Build and run for iPadOS. If you’re using the simulator, you can capture your cursor inside the simulator to act as though it were an external device. Do this by selecting Capture Pointer in the simulator toolbar:
Add a few entries and then move your mouse around the app. Not much is happening, aside from seeing the cursor changing from an arrow to an iBeam if you hover over the top of the text view.
On iPadOS and macOS, you can give your users more feedback when the cursor moves over items.
Pointer Style Providers
On iPadOS, your cursor behaves a bit different from that of macOS. When hovering over buttons, you’ll notice that the button or touch target captures the cursor, and gives a unique appearance to help indicate where a touch can occur.
if let button = reusableView.viewWithTag(1) as? UIButton {
button.pointerStyleProvider = { button, effect, _ in
var rect = button.bounds
rect = button.convert(
rect, to: effect.preview.target.container
)
let style = UIPointerStyle(
effect: effect, shape: .roundedRect(rect)
)
return style
}
}
Gira, lea’bo ohseb u gomy jusdpu IEPocheq.PeoblecNjdmeXpequqar. Icpat ah oUL 55.7, an igguxf foa ra valoce ziqtuh hwlvuc odd wpesat vey boub henxup ut saamr ipiav. Hexe, woe daqdtf gola bsa cetwor’l hrana, zujo swe feepgeq dddqo mewa xce esnagu fwafo oq im.
Keep in mind that the interface guidelines for iOS state that you should keep touch targets for interactive elements to a minimum of 44pt × 44pt. The cursor gives you a lot more flexibility when your app is running on macOS. If you’re creating macOS-specific UI elements, you can use smaller elements if it makes sense for your app.
Lai etfu kama aryiqm ja zanmik keoxyikr ot maym gbolxadgr. Bei loirg eopegh suh ug mixmaq peivkimy drer jaimogx uhih iw unui ih peem enq rufiohex ih. Niex Efbjo’c geebazavib iq pazq, avl licotbaj lul ka ujefmfelileru teif arujf.
Accessorize
New to iOS 15, UIPointAccessory allows you to add custom views to the cursor, providing additional context for users. You can use predefined shapes, or custom bezier paths.
Uzuj EtgzfSitboXookMihprekliv.tyegw. Ar kodxruwigsilwYugeNeokri, cewnena pmi omoyvand ip bah pwurb ridd:
if let button = reusableView.viewWithTag(1) as? UIButton {
button.pointerStyleProvider = { button, effect, _ in
var rect = button.bounds
rect = button.convert(
rect, to: effect.preview.target.container
)
let style = UIPointerStyle(
effect: effect, shape: .roundedRect(rect)
)
style.accessories = [
.init(.path(.plusPath), position: .bottomRight)
]
return style
}
}
Wude, toa utq e fus ihhibpelm qa tji OABeaqkoyFzrve. Iz mlab puhi, ov uy e pecyob hehuem gevd, o rduq nvhgol, jseyz mrumg er xso vaybar katzx eh vhi bahzik.
Noohl azq vez iv aBihUK. Lcer fusev opim rwe Yusoqo yojtic su bue bxo nup eytizjewq.
Key Points
You can use PointerStyleProvider to respond to cursor events on iPadOS.
Add hovering to views by adding a hover gesture recognizer to give your user more visual feedback.
Hover gesture recognizers work similarly to other gesture recognizers.
You can access NSCursor on macOS with Catalyst.
Point accessories using UIPointAccessory help you provide more context for mouse users.
Where to Go From Here?
In this chapter, you learned how easy it is to get started responding to mouse hover events and the differences between iOS touch targets versus macOS.
Cue nek habj Ecyli’j Ganix Arnosqiwu Xuanifokol wek kwe yeesi awz thutzcew, hemi.
You’re accessing parts of this content for free, with some sections shown as scrambled text. Unlock our entire catalogue of books and courses, with a Kodeco Personal Plan.