IOS рдкрд░ VoiceOver: рдЖрдо рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди

рдЬрдм рдЖрдк рдЕрдВрдзреЗ рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЕрдХреНрд╕рд░ рдХреБрдЫ рдЧрд▓рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ: рдпрд╛ рддреЛ рдЖрджреЗрд╢ рдЦреЛ рдЬрд╛рдПрдЧрд╛, рдлрд┐рд░ рдлреЛрдХрд╕ рд╡рд╣рд╛рдВ рдирд╣реАрдВ рдорд┐рд▓реЗрдЧрд╛ред рджреВрд╕рд░реА рдУрд░, рдпреВрдПрдХреНрд╕ рд╣реИ, рдЬреЛ рдпрд╛рдж рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╣рдо рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдорд╕реНрдпрд╛рдУрдВ рдФрд░ рдЙрдирдХреЗ рд╕рдорд╛рдзрд╛рдиреЛрдВ рд╕реЗ рдирд┐рдкрдЯреЗрдВрдЧреЗред



IOS рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдПрдХ рдмрдбрд╝рд╛ рд╡рд┐рд╖рдп рд╣реИ, рд╕рдм рдХреБрдЫ рдПрдХ рд▓реЗрдЦ рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реБрдЖ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдЬрд╛рд░реА рдХрд░рддрд╛ рд╣реВрдВред

  1. рд╡реЙрдпрд╕ рдХрдВрдЯреНрд░реЛрд▓ рдФрд░ рд╡реЙрдЗрд╕рдУрд╡рд░: рдмреНрд▓рд╛рдЗрдВрдб рдпрд╛ рд╕реНрдЯрд┐рд▓ рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХреИрд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░реЗрдВ ред
  2. IOS рдкрд░ VoiceOver: рдкреНрд░рддреНрдпреЗрдХ рдирд┐рдпрдВрддреНрд░рдг рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИред
  3. IOS рдкрд░ VoiceOver: рдЖрдо рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рдиред
  4. рд╡реЙрдпрд╕рдУрд╡рд░, рд╡реЙрдпрд╕ рдХрдВрдЯреНрд░реЛрд▓ рдФрд░ рдпреВрдЖрдИ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ред (рдЪрд╛рд▓реВ)

рдореЗрдВ рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ рд╣рдо рдЕрдВрдзреЗ VoiceOver рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рдХреЗ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд╕рд╛рде рдирд┐рдкрдЯрд╛: рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд┐рдП рдирд┐рдпрдВрддреНрд░рдг, рдЙрдиреНрд╣реЗрдВ, рдлрд┐рдХреНрд╕реНрдб рдиреЗрд╡рд┐рдЧреЗрд╢рди рд╡рд░реНрдЧреАрдХреГрдд рдХрд┐рдпрд╛ред рдореЗрдВ рджреВрд╕рд░реЗ рднрд╛рдЧ, рд╣рдо рдЖрдЧреЗ рд▓реЗ рдЧрдпрд╛ рдФрд░ "рд╕реБрд╡рд┐рдзрд╛рдУрдВ" рд╣реИ рдХрд┐ рдЖрд╡реЗрджрди рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдЕрдВрдзреЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдХрд╛рдо рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдФрд░ рдЖрдо рддреМрд░ рдкрд░ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд▓рд┐рдП рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХреА рдЬрд╛рдВрдЪ рдХреАред

рдЖрдЬ рд╣рдо рдкрд┐рдЬреНрдЬрд╛ рд╕реНрдХреНрд░реАрди рдХреЛ рдПрдбреЙрдкреНрдЯ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рдо рдЬрд╛рд░реА рд░рдЦреЗрдВрдЧреЗ: рд╣рдо рдХреНрд░реЙрд▓ рдСрд░реНрдбрд░ рдХреЛ рдмрджрд▓ рджреЗрдВрдЧреЗ, рдЦрд░реАрдж рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╕рд╛рд░рд╛рдВрд╢рд┐рдд рдХрд░реЗрдВрдЧреЗ, рдореЛрдбрд▓ рд╡рд┐рдВрдбреЛ рдХреЛ рдареАрдХ рдХрд░реЗрдВрдЧреЗ рдФрд░ рд▓реЛрдбрд┐рдВрдЧ рдЗрдВрдбрд┐рдХреЗрдЯрд░ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░реЗрдВрдЧреЗред

рдирд┐рдпрдВрддреНрд░рдг рдлрд┐рд░ рд╕реЗ


рдпрджрд┐ рдЖрдк рд╡реЙрдЗрд╕рдУрд╡рд░ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд╕рд╣реА рдХреНрд░рдо рдХреЛ рд╕реЗрдЯ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЧрд▓рдд рдХреНрд░рдо рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░реЗрдЧрд╛ рдФрд░ рдкрдврд╝реЗрдЧрд╛ рдЬреИрд╕рд╛ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдмрдЯрди "рдмрдВрдж" рдФрд░ "рдЯреЛрдХрд░реА рдХреЗ рд╕рд╛рде" рд╣реБрдЖред

рд╕реНрдХреНрд░реАрди рд╕реНрдХреНрд░реЙрд▓ рдХрд░реЗрдЧреА рдФрд░ рдмрдЯрди рдКрдкрд░ рд╣реИрдВ UIScrollViewред рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ VoiceOver рдкрд╣рд▓реЗ рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЛ рдЕрдВрджрд░ рд╕реЗ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ UIScrollViewрдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рд╢реАрд░реНрд╖ рдмрдЯрди рдкрд╛рддрд╛ рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП, VoiceOver рдХрд╛ рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдЧрд▓рдд рд╣реЛрдЧрд╛: рдмрдЯрди рд╕рдмрд╕реЗ рдКрдкрд░ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЙрдирдХреЗ рд╕рд╛рде рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдФрд░ рд╕реНрдХреЛрд░рд┐рдВрдЧ рд╢реБрд░реВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдкрд╣рд▓реЗ рдкрддрд╛ рдХрд░реЗрдВ рдХрд┐ рд╡реЙрдпрд╕рдУрд╡рд░ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рдХреНрд░рдо рдХреЛ рдХреИрд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рд╡рд╣ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд░рддрд╛ рд╣реИ: рдПрдХ рд╕рдВрдкрддреНрддрд┐ рд╕реЗ рддрддреНрд╡ рд▓реЗрддрд╛ рд╣реИ accessibilityElementsред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рд╡реЗ рд╕рднреА viewрд╡рд╣рд╛рдВ рдореМрдЬреВрдж рд╣реИрдВ isAccessibilityElement = trueред

рдЕрдм рд╣рдо рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдХреЗ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдмрдЯрди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ accessibilityElements:

override var accessibilityElements: [Any]? {
    get {
        var elements = [Any]()
            
        elements.append(contentsOf: [closeButton, cartButton])
        elements.append(contentsOf: contentScrollView.accessibilityElements)
            
        return elements
    }
    set { }
}

рд╕рдореВрд╣ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПрд╕рдорд░реНрдерди рдпреЛрдЧреНрдпрддрд╛ред рдмрдЪреНрдЪреЛрдВ


рдЖрдорддреМрд░ рдкрд░, рд╡реЙрдпрд╕рдУрд╡рд░ рдПрдХ рдкреНрд░рд╛рдХреГрддрд┐рдХ рдХреНрд░рдо рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ - рдмрд╛рдПрдВ рд╕реЗ рджрд╛рдПрдВ, рдКрдкрд░ рд╕реЗ рдиреАрдЪреЗ рддрдХ:



рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕рдореВрд╣рдмрджреНрдз рдирд┐рдпрдВрддреНрд░рдг рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рд╡реЙрдпрд╕рдУрд╡рд░ рдХреЛ рд╕рдореВрд╣ рдореЗрдВ рдирд┐рдХрдЯрддрдо рддрддреНрд╡ рдкрд░ рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдкрдврд╝рдиреЗ рдХреЗ рдХреНрд░рдо рдореЗрдВ рдирд╣реАрдВред рд╕реЗрдЯ рдХрд░реЗрдВ .shouldGroupAccessibilityChildren = true, рдФрд░ рдЖрджреЗрд╢ рддрддреНрд╡реЛрдВ рдХреА рдирд┐рдХрдЯрддрд╛ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдЧрд╛ред рд╕рдВрдкрддреНрддрд┐ рдХреЛ viewрд╕рднреА рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП ред



рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓рд╛ рдЖрдЗрдЯрдо рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВ


рдПрдХ рдЕрдиреНрдп рд░реАрдбрд┐рдВрдЧ рдСрд░реНрдбрд░ рдореБрджреНрджрд╛ рд╣реИ рдЬрдм рд╡реЙрдпрд╕рдУрд╡рд░ рдкрд╣рд▓реА рдмрд╛рд░ рд╕реНрдХреНрд░реАрди рдЦреЛрд▓рддрд╛ рд╣реИ, рдпрд╣ рд╢реАрд░реНрд╖ рдмрд╛рдПрдВ рддрддреНрд╡ рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░, рдпрд╣ рдмреИрдХ рдмрдЯрди рд╣реИред рдПрдХ рдУрд░, рдпрд╣ рдЖрдкрдХреЛ рдкрд┐рдЫрд▓реА рд╕реНрдХреНрд░реАрди рдкрд░ рдЬрд▓реНрджреА рд╕реЗ рд▓реМрдЯрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдпрджрд┐ рдЖрдк рдЧрд▓рддреА рдХрд░рддреЗ рд╣реИрдВред рджреВрд╕рд░реА рдУрд░, рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдХрд┐рд╕ рд╕реНрдХреНрд░реАрди рдкрд░ рдЕрдкрдиреА рд╕рдордЭ рдЦреЛ рджреЗрддреЗ рд╣реИрдВред рдЖрдк рд╕реНрдерд┐рддрд┐ рдХреЛ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдЖрдк рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╡рд╛рдВрдЫрд┐рдд рдирд┐рдпрдВрддреНрд░рдг рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред

Apple рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ?
рдпрд╣ рдЕрдЬреАрдм рд╣реИ рдХрд┐ UINavigationController"рдмреИрдХ" рдмрдЯрди рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдореИрдВ рдЗрд╕реЗ рд╕реНрдХреНрд░реАрди рдХреЗ рд╢реАрд░реНрд╖рдХ рдкрд░ рд░рдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдЬреЛ рдЦреБрд▓рддрд╛ рд╣реИред рд╕реБрд╡рд┐рдзрд╛ рдкрдХреНрд╖ рд╕реЗ, рдореБрдЭреЗ рд╢реАрд░реНрд╖рдХ рдпрд╛ рдкрд╣рд▓реЗ рдирд┐рдпрдВрддреНрд░рдг рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рд╕рд╣реА рд▓рдЧрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдирдИ рд╕реНрдХреНрд░реАрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рджреЗрддреЗ рд╣реИрдВред рдЖрдк рд╕реНрдХреНрд░рдм рдХреЗ рдЗрд╢рд╛рд░реЗ рд╕реЗ рд╡рд╛рдкрд╕ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ ред

рдЖрдк рдЕрд▓рд░реНрдЯ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд╝реЛрдХрд╕ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ UIAccessibility.post(notification: тАж)ред рдпрд╣ рджреЛ рдкреИрд░рд╛рдореАрдЯрд░ рд▓реЗрддрд╛ рд╣реИ:

  • рдкреНрд░рдЬрд╛рддрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ UIAccessibility.Notificationред
  • рд╡рд╣ рд╡рд╕реНрддреБ рдЬрд┐рд╕ рдкрд░ рд╕рддрд░реНрдХрддрд╛ рд▓рд╛рдЧреВ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░, рдпрд╣ рдкрд╛рда рдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдкрдВрдХреНрддрд┐ рд╣реИ рдЬрд┐рд╕реЗ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдХреЗ рдмрд╛рдж рдЪреБрдирд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЖрдк рд╣реЗрдбрд░ рдкрд░ viewDidLoad рдореЗрдВ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

override func viewDidLoad() {
    super.viewDidLoad()
        
    UIAccessibility.post(notification: .screenChanged,
                         argument: titleLabel);
}

рдЖрдк рдЙрд╕ рд╡рд╕реНрддреБ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕ рдкрд░ рдЖрдк рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдпрд╛ рдкрд╛рда рдХрд╛ рдЙрдЪреНрдЪрд╛рд░рдг рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИред

рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдЕрд▓рд░реНрдЯ рдХреЗ рдкреНрд░рдХрд╛рд░


  • .screenChanged тАФ , . - .
  • .layoutChanged тАФ . , , ┬л┬╗ .
  • .announcement тАФ . . , . , .

    DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(100)) {
    		UIAccessibility.post(notification: .announcement,
                             argument: text)
    }
  • .pageScrolled тАФ .UIScrollView ┬л 3 5┬╗, . , , .
  • .pauseAssistiveTechnology .resumeAssistiveTechnology тАФ  VoiceOver.

рджреЗрд╢реА рддрд░реАрдХреЗ рд╕реЗ рдореЛрдбрд▓ рд╡рд┐рдВрдбреЛ рджрд┐рдЦрд╛рдПрдВ


рдЬрдм VoiceOver рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдФрд░ рдХрд░реЗрдВрдЧреЗ) рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдЕрдиреБрдорддрд┐ рд╕рднреА рдЬрд╛рдо рд╢реВрдЯред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдПрдХ рд╕рдВрджреЗрд╢ рдлрд╝реАрдб рдХрд┐рдпрд╛ рдФрд░ рддрд╛рдХрд┐ рд╕рдВрджреЗрд╢ рдиреАрдЪреЗ рд╕реЗ рд╢реБрд░реВ рд╣реЛ, рд╣рдордиреЗ рдлреНрд▓рд┐рдк рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ UITableViewрдФрд░ рдлрд┐рд░ рд╕рднреА рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рдлреНрд▓рд┐рдк рдХрд┐рдпрд╛ ред рдиреЗрддреНрд░рд╣реАрди, рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реВрдЪреА VoiceOver рдореЗрдВ рддреАрди рдЙрдВрдЧрд▓рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЙрд▓реНрдЯрд╛ рд╕реНрдХреНрд░реЙрд▓ рдХрд░реЗрдЧреАред

рд╣рдореЗрдВ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рднреА рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рдХрд┐ рд╣рдо рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдмрджрд▓ рдирд╣реАрдВ рд╕рдХрддреЗ, рдХреНрдпреЛрдВрдХрд┐ рдЦрд┐рдбрд╝рдХреА рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рдерд╛ред рдпрд╣ рдЗрд╕рд▓рд┐рдП рд╣реБрдЖ рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рджреГрд╢реНрдп рджрд┐рдЦрд╛рдпрд╛ рдерд╛, рди UIViewControllerрдХрд┐ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ UIPresentationController.рд╡реЙрдЗрд╕рдУрд╡рд░ рдХреЗ рд╕рд╛рде, рдЬреЛ рдЗрд╕реЗ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ .firstResponder, рдФрд░ рд╣рдорд╛рд░рд╛ viewрдирд╣реАрдВ рдерд╛ред



рдпрджрд┐ рдкреБрдирд░реНрд▓реЗрдЦрди рдХреЗ рд▓рд┐рдП рд╕рдордп рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕рдХреЗ viewрд▓рд┐рдП рд╕рдВрдкрддреНрддрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ accessibilityViewIsModalред рддрдм VoiceOver рдХреЗрд╡рд▓ рдЙрд╕реА рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдЧрд╛ viewред

override var accessibilityViewIsModal: Bool {
    get { return true }
    set {}
}

рд╕рдЪ рдХрд╣реВрдВ, рддреЛ рдпрд╣ рдореЗрд░реЗ рдФрд░ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХрднреА рдХрд╛рдо рдирд╣реАрдВ рдЖрдпрд╛ UIPresentationController.

рдЕрджреГрд╢реНрдп рдлреНрд░реЗрдореНрд╕ рд╕рдВрд░реЗрдЦрд┐рдд рдХрд░реЗрдВ


рд░реАрдбрд┐рдВрдЧ рдСрд░реНрдбрд░ рдХреЛ рдлреНрд░реЗрдо рджреНрд╡рд╛рд░рд╛ рдЧрд┐рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХрднреА-рдХрднреА рдпрд╣ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП "i" рдмрдЯрди рдХреЗ рдлреНрд░реЗрдо рдХреЛ рдмрдбрд╝рд╛ рдХрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рдкрд┐рдЬреНрдЬрд╛ рдирд╛рдо рдХреЗ рдлреНрд░реЗрдо рд╕реЗ рдКрдВрдЪрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдлреЛрдХрд╕ рдХрд╛ рдкрд╣рд▓рд╛ рддрддреНрд╡ "рдЖрдИ" рдмрдЯрди рдерд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЫреЛрдЯрд╛ рд╣реИ, рдпрд╣ рджрд╛рдИрдВ рдУрд░ рд╣реИ рдФрд░ рдЖрдорддреМрд░ рдкрд░ рдЗрддрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИред



рдЖрдк рдкрдврд╝рдиреЗ рдХреЗ рдХреНрд░рдо рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ accessibilityElements, рд▓реЗрдХрд┐рди рдореИрдВ рдПрдХ рдЕрд▓рдЧ рддрд░реАрдХрд╛ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ред рд╡реЙрдЗрд╕рдУрд╡рд░ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ accessibilityFrame, рдмрд╕ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рдлреНрд░реЗрдо рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред рдХрдИ рд╕рдорд╛рдзрд╛рди рд╣реИрдВ:

  1. рдирд┐рдпрдВрддреНрд░рдг рдЙрдкрд╡рд░реНрдЧ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░реЗрдВ рдФрд░ рдХрдо рдХрд┐рдпрд╛ рдЧрдпрд╛ рдорд╛рди рд▓реМрдЯрд╛рдПрдВред
  2. рдмрд╛рд╣рд░ рд╕рд╣реА рдлреНрд░реЗрдо рд╕реЗрдЯ рдХрд░реЗрдВред
  3. рдмрд╕ рдлреНрд░реЗрдо рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░реЗрдВ рддрд╛рдХрд┐ рдпрд╣ рд╢рд┐рд▓рд╛рд▓реЗрдЦ рдХреЗ рд╕рд╛рде рдлреНрд▓рд╢ рд╣реЛред

рд▓реЗрдХрд┐рди рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдпрд╣ рдлреНрд░реЗрдо рд╕реНрдХреНрд░реАрди рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдореЗрдВ рд╣реИред рд╕рд╛рдзрд╛рд░рдг рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ UIAccessibility.convertToScreenCoordinatesред

рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд┐рдпрдВрддреНрд░рдгреЛрдВ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕реНрд╡рд┐рдЪрд░ рдФрд░ рдЙрд╕рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рддрддреНрд╡ рдмрдбрд╝рд╛ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдЙрд╕ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛, рдЕрдирд╛рд╡рд╢реНрдпрдХ рджреЛрд╣рд░рд╛рд╡ рджреВрд░ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

override func layoutSubviews() {
        super.layoutSubviews()
        repeatSwitch.accessibilityLabel = repeatLabel.text
        repeatSwitch.accessibilityFrame = UIAccessibility.convertToScreenCoordinates(
                repeatSwitch.frame.union(repeatLabel.frame).insetBy(dx: -12, dy: -12),
                in: repeatSwitch.superview!)
}

рдореИрдВрдиреЗ рдлреЛрдХрд╕ рдХреЛ рднреА рдмрдбрд╝рд╛ рдмрдирд╛рдпрд╛ рд╣реИ .inset, рдЗрд╕реЗ рдкреНрд░реЗрд╕ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред



рдлреНрд░реЗрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдФрд░ AccessibilityContainerрдЖрдк рдЧреНрд░рд╛рдл рдФрд░ рдЯреЗрдмрд▓ рдЙрдкрд▓рдмреНрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдореБрдЦреНрдп рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдХрд░реЗрдВ


рдпрд╣ UX рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЖрдкрдХреЛ рд╡реИрд╕реЗ рднреА рдмрддрд╛рдКрдВрдЧрд╛ред рд╕рд╛рдорд╛рдиреНрдп рджреГрд╖реНрдЯрд┐ рд╡рд╛рд▓рд╛ рд╡реНрдпрдХреНрддрд┐ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕реНрдХреНрд░реАрди рд╕реЗ рд╕рднреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдЕрдВрдзреЗ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕рднреА рдирд┐рдпрдВрддреНрд░рдгреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕реЙрд░реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЖрдк рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЦрд░реАрджреЗрдВ рдмрдЯрди рдореЗрдВ рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "рдЦрд░реАрджреЗрдВ рдмрдЯрди" рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдмреЗрдХрди рдЬреЛрдбрд╝реЗрдВ, рдЬреИрд▓рд╛рдкреЗрдиреЛ рдХреЛ рд╣рдЯрд╛ рджреЗрдВред рдореВрд▓реНрдп 434 write ┬╗, рдЖрдкрдХреЛ рдХреЛрдб рдореЗрдВ рдХреБрдЫ рднреА рдЕрд╕рд╛рдорд╛рдиреНрдп рд▓рд┐рдЦрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ, рдмрд╕ рдЬреЛрдбрд╝рд╛ / рд╣рдЯрд╛рдП рдЧрдП рдХреЗ рд╕рд╛рде рд▓рд╛рдЗрди рдПрдХрддреНрд░ рдХрд░реЗрдВ:

accessibilityTraits = .button
accessibilityLabel = ""
accessibilityValue = " ,  .  434тВ╜" 

рдФрд░ рдбрд╛рдЙрдирд▓реЛрдб рд╕рдВрдХреЗрддрдХ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рдирд╛ рди рднреВрд▓реЗрдВ


рдпрджрд┐ рдХрд╛рд░реНрдЯ рдореЗрдВ рдЙрддреНрдкрд╛рдж рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж рдЖрдк рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░реВрдк рд╕реЗ рд░реЛрдХрддреЗ рд╣реИрдВ рдФрд░ рдХреБрдЫ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдбрд╛рдЙрдирд▓реЛрдб рдЗрдВрдбрд┐рдХреЗрдЯрд░ рдЙрдкрд▓рдмреНрдз рдХрд░рдирд╛ рди рднреВрд▓реЗрдВ:

  1. рд╕рдВрдХреЗрддрдХ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд▓рд░реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
  2. рдлреЛрдХрд╕ рдХреЛ рдПрдХ рдирд╛рдо рджреЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИред
  3. рд▓рдЧрд╛ рджреЛ accessibilityViewIsModalред
  4. рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдЬрдм рдбрд╛рдЙрдирд▓реЛрдб рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИред

рдпрджрд┐ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЖрдк рдПрдХ рдирдИ рд╕реНрдХреНрд░реАрди рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ, рддреЛ рд╡реЙрдпрд╕рдУрд╡рд░ рд╕реНрд╡рдпрдВ рдлреЛрдХрд╕ рдХреЛ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдбрд╛рдЙрдирд▓реЛрдб рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИред рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЖрдк рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдпрд╣ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдХрдВрдкрди рднреА рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ ред

Apple рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ?
рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╕рдлрд╛рд░реА рдЖрдИрдУрдПрд╕ 13 рдореЗрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рдПрдХ рдкреЗрдЬ рд▓реЛрдб рдХреЗ рджреМрд░рд╛рди, рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрдХрдВрдб рдореЗрдВ рдПрдХ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЬрдм рдПрдХ рдкреЗрдЬ рд▓реЛрдб рд╣реЛрддрд╛ рд╣реИ рддреЛ рдпрд╣ * woop-dumb * рдХрд░рддрд╛ рд╣реИред рдХрд╛рд╢, рдЖрдкреА рдХреА рдУрд░ рд╕реЗ рдпрд╣ рдЕрднреА рддрдХ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ, рд╣рдо iOS 14 рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред



рд╕реНрдХреНрд░реАрди рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛: рд╣рдордиреЗ рдмрдЯрдиреЛрдВ рдХреЗ рдХреНрд░рдо рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛, рдлреЛрдХрд╕ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рддрддреНрд╡ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛, рдореЛрдбрд▓ рд╡рд┐рдВрдбреЛ рдХреЛ рдареАрдХ рдХрд┐рдпрд╛, рдореБрдЦреНрдп рдмрдЯрди рдкрд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рд╕рд╛рд░рд╛рдВрд╢рд┐рдд рдХрд┐рдпрд╛ рдФрд░ рдЖрд╡реЗрджрди рдХреА рд╕реБрд╡рд┐рдзрд╛ рдкрд░ рдХрд╛рдо рдХрд┐рдпрд╛ред рдпрд╣ рдЬреНрдЮрд╛рди рд▓рдЧрднрдЧ рдХрд┐рд╕реА рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдЖрдЧреЗ рдмрдврд╝реЗрдВред

рдЕрдЧрд▓реА рдмрд╛рд░ рдореИрдВ VoiceOver, рд╡реЙрдпрд╕ рдХрдВрдЯреНрд░реЛрд▓ рдФрд░ UI рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдБрдЧрд╛ред
рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдХреЛ рдпрд╛рдж рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореЗрд░реЗ рдбреЛрдбреЛ рдкрд┐рдЬреНрдЬрд╛ рдореЛрдмрд╛рдЗрд▓ рдЪреИрдирд▓ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдВ ред

All Articles