✨ Create focus guides linker more easily and versatile
You can download this repository and see this example app.
🌼 Thanks to @EdyJunior
In Podfile
add
pod 'FocusGuideHelper'
and use pod install
.
In your Swift file, import this pod:
import FocusGuideHelper
Then, create a object of FocusGuideHelper
, for example:
class ViewController: UIViewController {
let guideHelper = FocusGuideHelper()
...
And, you need call updateFocus(in:)
for every time the focus changes:
override func didUpdateFocus(in context: UIFocusUpdateContext, with coordinator: UIFocusAnimationCoordinator) {
guideHelper.updateFocus(in: context)
}
override func viewDidLoad() {
super.viewDidLoad()
guideHelper.addLinkByFocus(
from: containerForm, // original view
to: containerRaccon, // destination when to touch in this focus guide
inPosition: .left // position of the focus guide in relation of "from"
)
...
Sometimes, you need update your focus guide, because a destination view is changed, or to avoid have multiple copies of the same focus:
func someFunctionCalledSometimes() {
guideHelper.addLinkByFocus(
from: containerForm,
to: containerRaccon,
inPosition: .left,
identifier: "containerForm to containerRaccon" // identifier of this focus guide
)
}
You can write anything in identifier
. In each FocusGuideHelper
object, can have only one focus with same identifier.
If another focus guide to be created with same identifier, the older is replaced.
Sometimes, you need enable or disable a focus guide, to avoid conflict, or to create another experience:
guideHelper.addLinkByFocus(
from: someRaccon,
to: someView,
inPosition: .bottom,
identifier: "raccon to view",
activedWhen: { context in
return (context.nextFocusedView as? RacconView) != nil
}
)
If the activedWhen
returned true
, then the focus is enabled, otherwise, the focus is disabled.
The identifier
is optional.
guideHelper.addLinkByFocusTemporary(
from: someRaccon,
to: someView,
inPosition: .right
)
This focus guide will be automatically removed when the focus changed.
It's useful for avoid conflict with anothers focus guide, or when a destination view is also temporary.
Sometimes, you need a temporary focus, but, that is removed at another time, then:
guideHelper.addLinkByFocus(
from: someRaccon,
to: someView,
inPosition: .bottom,
identifier: "raccon to someView",
autoexcludeWhen: { context in
return (context.nextFocusedView as? RacconView) == nil
}
)
This focus is excluded when the autoexcludeWhen
return true.
The identifier
is optional.
Maintainer: