Optimizing Your iPad App for Mac

Panther·2021년 7월 29일
0
post-custom-banner

https://developer.apple.com/documentation/uikit/mac_catalyst/optimizing_your_ipad_app_for_mac

"Make your iPad app more like a Mac app by taking advantage of system features in macOS."

macOS에 있는 시스템 기능의 이점을 활용함으로써 아이패드 앱을 더욱 맥 앱과 같은 형태로 만들어줍니다.

Overview

아이패드 앱의 맥 버전은 macOS에 있는 많은 시스템 기능들을 지원합니다. 특별한 공을 들이지 않고도 가능합니다. 아래 내용을 포함합니다.

  • 앱을 위한 기본값 메뉴 바입니다.
  • 트랙패드, 마우스, 키보드 입력장치에 대한 지원을 합니다.
  • 윈도우 크기 조정과 전체 스크린 디스플레이를 지원합니다.
  • 맥 스타일의 스크롤바입니다.
  • 복사 및 붙여넣기를 지원합니다.
  • 드래그 드롭을 지원합니다.
  • 시스템 터치 바 컨트롤을 지원합니다.

더 많은 시스템 기능의 이점을 활용할 수 있도록 앱을 확장시킬 수도 있습니다.

Important
맥 Catalyst에 의해 빌드된 맥 앱은 맥 Catalyst에서 사용이 가능하다고 표시된 Appkit API(NSToolbar, NSTouchBar와 같은)만 사용이 가능합니다. 맥 Catalyst는 사용 불가능한 AppKit API는 지원하지 않습니다.

Add Menu Bar Items

앱의 맥 버전은 표준 메뉴 바를 동반합니다. UIMenuBuilder를 사용해 메뉴 아이템을 추가하거나 삭제함으로써 커스텀으로 구현할 수 있습니다. 이에 대한 더 많은 정보는 Adding Menus and Shortcuts to the Menu Bar and User Interface를 살펴보시기 바랍니다.

Adding Menus and Shortcuts to the Menu Bar and User Interface
https://developer.apple.com/documentation/uikit/uicommand/adding_menus_and_shortcuts_to_the_menu_bar_and_user_interface

Show a Preferences Window

맥 앱은 preference 윈도우를 표시함으로써 사용자가 앱의 특정 설정을 관리할 수 있도록 해줍니다. 사용자는 메뉴 바에 있는 Preferences 메뉴 아이템에 뒤이어 나오는 앱 메뉴를 선택함으로써 이 윈도우를 볼 수 있습니다. 앱이 세팅 번들을 갖고 있는 경우 시스템은 자동으로 preferences 윈도우를 제공합니다. 이에 대한 더 많은 정보는 Displaying a Preferences Window를 살펴보시기 바랍니다.

https://developer.apple.com/documentation/uikit/mac_catalyst/displaying_a_preferences_window
https://velog.io/@panther222128/Displaying-a-Preferences-Window

Apply a Translucent Background to Your Primary View Controller

스플릿 뷰 컨트롤러를 사용하는 아이패드 앱은 macOS에서 작동할 때 맥 스타일의 수직 스플릿 뷰를 가져옵니다. 맥에서 아이패드 앱이 더 홈처럼 보이길 원한다면, 바탕화면을 흐리게 보일 수 있도록 반투명 효과를 주요 뷰 컨트롤러의 배경으로 적용해야 합니다. 이렇게 하려면 Listing 1에서 보이는 것처럼 스플릿 뷰 컨트롤러의 primaryBackgroundStyleUISplitViewController.BackgroundStyle.sidebar로 설정하시기 바랍니다.

Listing 1 Add a translucent background to the primary view controller

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

    let splitViewController = window!.rootViewController as! UISplitViewController
    let navigationController = splitViewController.viewControllers[splitViewController.viewControllers.count-1] as! UINavigationController
    navigationController.topViewController!.navigationItem.leftBarButtonItem = splitViewController.displayModeButtonItem
    
    // Add a translucent background to the primary view controller.
    splitViewController.primaryBackgroundStyle = .sidebar
    
    splitViewController.delegate = self
    
    return true
}

Detect the Pointer in a View

맥 사용자는 텍스트 필드를 선택하거나 윈도우를 움직이려할 때 포인터에 의존해 앱과 상호작용합니다. 사용자가 UI 요소에 포인터를 움직이면, 몇 가지 요소는 모양이 바뀌어야만 합니다. 예를 들어 웹 브라우저는 링크에 포인터가 올라가는 경우 링크를 강조해야 합니다.

사용자가 앱에 있는 뷰에 포인터를 올리는 것을 감지할 수 있도록 하려면, UIHoverGestureRecognizer를 해당 뷰에 추가하시기 바랍니다. 이는 포인터가 뷰에 진입하거나 빠져나올 때 혹은 뷰 위에서 이동하는 경우 앱에게 이를 알려주도록 합니다.

Listing 2 Change the button's default color to red as the pointer moves over the button

class ViewController: UIViewController {

    @IBOutlet var button: UIButton!

    override func viewDidLoad() {
        super.viewDidLoad()

        let hover = UIHoverGestureRecognizer(target: self, action: #selector(hovering(_:)))
        button.addGestureRecognizer(hover)
    }

    @objc
    func hovering(_ recognizer: UIHoverGestureRecognizer) {
        switch recognizer.state {
        case .began, .changed:
            button.titleLabel?.textColor = #colorLiteral(red: 1, green: 0, blue: 0, alpha: 1)
        case .ended:
            button.titleLabel?.textColor = UIColor.link
        default:
            break
        }
    }
}
post-custom-banner

0개의 댓글