Getting Started with Multitasking on ipad in ios 9

Similar documents
View Controller Programming Guide for ios

INTRODUCTION TO IOS CSCI 4448/5448: OBJECT-ORIENTED ANALYSIS & DESIGN LECTURE 13 02/22/2011

Start Developing ios Apps Today

How To Develop An App For Ios (Windows)

Advanced Graphics and Animations for ios Apps

How To Use Ios 5

A LITTLE PROMISE FROM YOU

ios Development Tutorial Nikhil Yadav CSE 40816/60816: Pervasive Health 09/09/2011

Assignment 2: Matchismo 2

Going Social with ReplayKit and Game Center

Chapter 1. Introduction to ios Development. Objectives: Touch on the history of ios and the devices that support this operating system.

Mobile App Design and Development

Xcode Application note

Mobility Introduction Android. Duration 16 Working days Start Date 1 st Oct 2013

This documentation is made available before final release and is subject to change without notice and comes with no warranty express or implied.

Continuous Integration with Xcode 6

DEVELOPING AN IOS APPLICATION FOR VALUE STREAM MAPPING WITH SWIFT

Objective C and iphone App

Beginner level: Modules 1 to 18. Advanced level: Quick review of modules 1 to 18, then following to module A Simple ios Application

ios 9 Accessibility Switch Control - The Missing User Guide Updated 09/15/15

Cross-Compiling Android Applications to the iphone

Praktikum Entwicklung von Mediensystemen mit

ios Application Development &

Learn iphone and ipad game apps development using ios 6 SDK. Beginning. ios 6 Games. Development. Lucas Jordan. ClayWare Games tm

Mobile Application Development L06: ios Drawing and Animation

ios SDK Release Notes for ios 5.0 beta 3

2. About iphone ios 5 Development Essentials. 5. Joining the Apple ios Developer Program

MA-WA1920: Enterprise iphone and ipad Programming

Using Microsoft Project 2000

Developing Applications for ios

iphone ios 6 Development Essentials

Improving Your App with Instruments

Mocean Android SDK Developer Guide

Creating a Poster in PowerPoint A. Set Up Your Poster

Your First ios Application

FREQUENTLY ASKED QUESTIONS

Assignment 1: Matchismo

Advanced Testing and Continuous Integration

ATVCLOUD. User just input Auto id. This iphone monitoring software can be applied on

A product of Byte Works, Inc. Credits Programming Mike Westerfield. Art Karen Bennett. Documentation Mike Westerfield

Remote Desktop Connection user guide for ios.

Connect for iphone. Aug, 2012 Ver 5.3b AWest. 1 P age

M, N, O F, G, H. network request, 101 ParseFacebookUtilities SDK, 100 profile, 100 user_about_me, 101 -(void)updateindicator, 101

(Unit) Testing ios Apps. Paweł Dudek

Arduino Training - Basics of Micro-controllers Programming Basics

Using an iphone to control the camera during remote shooting (PowerShot SX530 HS, SX610 HS, and SX710 HS)

Setting up RDP on your ipad

Client Requirement. Master Data Management App. Case Study -

MEAP Edition Manning Early Access Program Hello! ios Development version 14

White Noise Help Guide for iphone, ipad, and Mac

Merging Labels, Letters, and Envelopes Word 2013

Game Center Programming Guide

Sample Table. Columns. Column 1 Column 2 Column 3 Row 1 Cell 1 Cell 2 Cell 3 Row 2 Cell 4 Cell 5 Cell 6 Row 3 Cell 7 Cell 8 Cell 9.

Microsoft Tag Scanning SDK for iphone & Android Apps

Advanced Slider Documentation

Continuous Integration and Code Coverage in Xcode

ios Dev Fest Research Network Operations Center Thursday, February 7, 13

Optimize Your Earning Power with iad

ITP 342 Mobile App Dev. Alerts

geniusport mobility training experts

Axxon Monitor. User Manual

CSCI E-65: Mobile Application Development Using Swift and ios

Microsoft Office Excel 2007 Key Features. Office of Enterprise Development and Support Applications Support Group

ECDL. European Computer Driving Licence. Spreadsheet Software BCS ITQ Level 2. Syllabus Version 5.0

Please note that this SDK will only work with Xcode or above. If you need an SDK for an older Xcode version please support.

ios App Development for Everyone

Microsoft Office 2010 Publisher

ios Development: Getting Started Min Tsai March 1, 2011 terntek.com v1.0

Ensuring Success with the Personal Math Trainer Tips for Students and Family Members

ios App for Mobile Website! Documentation!

2. Create the User Interface: Open ViewController.xib or MainStoryBoard.storyboard by double clicking it.

AXON Mobile for ios Devices User Manual

Working with sections in Word

About the Tutorial. Audience. Prerequisites. Copyright & Disclaimer

App Programming Guide for ios

Interactive Voting System. IVS-Basic IVS-Professional 4.4

Parallels Remote Application Server

Using your ios device, open the App Store, Search for, download and install the WeMo App.

Application Development for Mobile and Ubiquitous Computing

Getting started. Advanced Contact Management

Customize Mobile Apps with MicroStrategy SDK: Custom Security, Plugins, and Extensions

A series Metric (cm) Imperial (inch)

What s New in Managing Apple Devices

Android App Development. Rameel Sethi

Computer Training Centre University College Cork. Excel 2013 Level 1

ON24 MOBILE WEBCASTING USER GUIDE AND FAQ FEBRUARY 2015

Assignment I Walkthrough

Praktikum Entwicklung von Mediensystemen mit ios

ios App Programming Guide

Welcome to the topic on the Import from Excel utility.

Keeping Your Watch App Up to Date

IOS App Development Training

Welcome to icue! Version 4

POWERPOINT BASICS: MICROSOFT OFFICE 2013

Contents. About Testing with Xcode 4. Quick Start 7. Testing Basics 23. Writing Test Classes and Methods 28. At a Glance 5 Prerequisites 6 See Also 6

Your First Windows Mobile Application. General

ios App Development for Everyone

research: technical implemenation

Making and Exporting a Backup

Transcription:

App Frameworks #WWDC15 Getting Started with Multitasking on ipad in ios 9 Session 205 Peter Hajas UIKit Engineer Jacob Xiao UIKit Engineer Kurt Revis UIKit Engineer 2015 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple.

Multitasking Sessions Getting Started with Multitasking on ipad in ios 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based Apps on ipad in ios 9 Pacific Heights Wednesday 2:30PM Optimizing Your App for Multitasking in ios Presidio Wednesday 3:30PM

Multitasking Sessions Getting Started with Multitasking on ipad in ios 9 Presidio Tuesday 4:30PM Multitasking Essentials for Media-Based Apps on ipad in ios 9 Pacific Heights Wednesday 2:30PM Optimizing Your App for Multitasking in ios Presidio Wednesday 3:30PM

Agenda Multitasking in your app Changes to UIKit for Multitasking Making the Most of Multitasking

Slide Over

Split View

Split View

Adaptivity

Designing for Adaptivity Universal apps iphone ipad

Designing for Adaptivity ios 8 Compact Regular

Designing for Adaptivity ios 8 Compact Regular

Designing for Adaptivity ios 8 Compact Regular

Designing for Adaptivity ios 8 Compact Regular

iphone 6 Plus

iphone 6 Plus

Designing for Adaptivity iphone 6 Plus Compact

Designing for Adaptivity iphone 6 Plus Regular

ipad Multitasking

Designing for Adaptivity ipad Multitasking

Designing for Adaptivity ipad Multitasking Compact

Designing for Adaptivity ipad Multitasking Regular

Why adopt Multitasking? Let users get into your app and spend more time in new ways

Adding ipad Multitasking to Your App

Adding Multitasking to Your App New ios 9 apps ipad Multitasking is enabled by default in new projects

Adding Multitasking to Your App Existing ios apps Build your app with the ios 9 SDK Support all orientations Use Launch Storyboards

Adding Multitasking to Your App Existing ios apps Build your app with the ios 9 SDK Support all orientations Use Launch Storyboards

Adding Multitasking to Your App Existing ios apps Build your app with the ios 9 SDK Support all orientations Use Launch Storyboards

Adding Multitasking to Your App Existing ios apps Build your app with the ios 9 SDK Support all orientations Use Launch Storyboards

Adding Multitasking to Your App Existing ios apps Build your app with the ios 9 SDK Support all orientations Use Launch Storyboards Opt out with the UIRequiresFullscreen key

ipad Multitasking in Your App Multitasking, how does it work?

UIScreen.bounds Returns the Screen Bounds UIScreen

UIScreen.bounds Returns the Screen Bounds UIScreen UIWindow

UIScreen.bounds Returns the Screen Bounds UIWindow

UIWindow.bounds Returns the Window Bounds UIWindow

UIWindow.bounds Returns the Window Bounds UIWindow

UIWindow.bounds Origin Always at (0,0) UIWindow

UIWindow

UIWindow

UIWindow

Horizontally Compact UIWindow

Horizontally Regular

Auto Layout Makes resizing much easier for your app to handle Right-to-left language support

Legibility Improvements UIView.readableContentGuide UILayoutGuide for legible region in a UIView

Legibility Improvements UITableView.cellLayoutMarginsFollowReadableWidth Adds margins to cells for legibility

What s Changed Best Practices Jacob Xiao ios Frameworks Engineer

What s Changed? Building Adaptive Apps with UIKit WWDC14

What s Changed? Not much! Building Adaptive Apps with UIKit WWDC14

Orientation

Orientation if UIInterfaceOrientationIsLandscape(interfaceOrientation) { } //...

Orientation

Orientation

Orientation

Orientation

Orientation

iphone Rotation

iphone Rotation

iphone Rotation

iphone Rotation

ipad Rotation

ipad Rotation

ipad Rotation

Multitasking Resize

Multitasking Resize

Orientation if UIInterfaceOrientationIsLandscape(interfaceOrientation) { } //...

Bounds if view.bounds.size.width > view.bounds.size.height { } //...

Size Classes if traitcollection.horizontalsizeclass ==.Regular { } //...

Transitions

Responding to Rotation willrotatetointerfaceorientation didrotatefrominterfaceorientation willanimaterotationtointerfaceorientation

Responding to Rotation and Resizing willtransitiontotraitcollection viewwilltransitiontosize

Rotation

Rotation Setup

Rotation Setup Create Animations

Rotation Setup Create Animations Run Animations

Rotation Setup Create Animations Run Animations Cleanup

Rotation Setup Sizes Change Create Animations Run Animations Cleanup

Rotation Setup willtransitiontotraitcollection viewwilltransitiontosize Sizes Change Create Animations Run Animations Cleanup

Rotation Setup Sizes Change willtransitiontotraitcollection viewwilltransitiontosize traitcollectiondidchange Create Animations Run Animations Cleanup

Rotation Setup Sizes Change Create Animations willtransitiontotraitcollection viewwilltransitiontosize traitcollectiondidchange animatealongsidetransition Run Animations Cleanup

Rotation Setup Sizes Change Create Animations willtransitiontotraitcollection viewwilltransitiontosize traitcollectiondidchange animatealongsidetransition Run Animations Cleanup completion

Multitasking Resize

Multitasking Resize Setup

Multitasking Resize Setup Create Animations

Multitasking Resize Setup Sizes Change Create Animations willtransitiontotraitcollection viewwilltransitiontosize traitcollectiondidchange animatealongsidetransition Run Animations Cleanup completion

Multitasking Resize willtransitiontotraitcollection viewwilltransitiontosize traitcollectiondidchange animatealongsidetransition completion

Multitasking Resize willtransitiontotraitcollection viewwilltransitiontosize Time Limit traitcollectiondidchange animatealongsidetransition completion

Multitasking Resize Setup Sizes Change Create Animations willtransitiontotraitcollection viewwilltransitiontosize traitcollectiondidchange animatealongsidetransition Run Animations Cleanup completion

Multitasking Resize Setup viewwilltransitiontosize Sizes Change Create Animations animatealongsidetransition Run Animations Cleanup completion

Multitasking Resize Setup willtransitiontotraitcollection Sizes Change Create Animations traitcollectiondidchange animatealongsidetransition Run Animations Cleanup completion

Multitasking Resize Setup Sizes Change Create Animations willtransitiontotraitcollection viewwilltransitiontosize traitcollectiondidchange animatealongsidetransition Run Animations Cleanup completion

Windows

Windows UIWindow

Windows UIWindow

Windows UIWindow

Windows UIWindow UIWindow

Windows UIWindow UIWindow

Windows UIWindow UIWindow

Windows UIWindow UIWindow

Windows SWIFT: UIWindow(frame: UIScreen.mainScreen.bounds()) OBJECTIVE-C: [[UIWindow alloc] initwithframe:[[uiscreen mainscreen] bounds]

Windows SWIFT: UIWindow() OBJECTIVE-C: [[UIWindow alloc] init]

Presentation

Presentation UIPresentationController

Presentation UIPresentationController A Look Inside Presentation Controllers WWDC14

Adaptive Presentation

Adaptive Presentation

Adaptive Presentation

Adaptive Presentation UIAdaptivePresentationControllerDelegate

Adaptive Presentation UIAdaptivePresentationControllerDelegate adaptivepresentationstyleforpresentationcontroller willpresentwithadaptivestyle

Popover

Popover

Popover Source popoverpresentationcontroller.barbuttonitem = sender

Popover Source popoverpresentationcontroller.barbuttonitem = sender OR popoverpresentationcontroller.sourceview = button popoverpresentationcontroller.sourcerect = button.bounds

Keyboard

Keyboard

Keyboard

Keyboard UIKeyboardWillShowNotification UIKeyboardDidShowNotification UIKeyboardWillHideNotification UIKeyboardDidHideNotification UIKeyboardWillChangeFrameNotification UIKeyboardDidChangeFrameNotification

Keyboard

Keyboard

Best Practices

Best Practices Consider size and Size Class instead of orientation

Best Practices Consider size and Size Class instead of orientation Think about how to respond to transition

Best Practices Consider size and Size Class instead of orientation Think about how to respond to transition Use adaptive presentations

Making the Most of Multitasking Deliver a great user experience Kurt Revis ios Frameworks Engineer

Multitasking Design for Adaptivity

Multitasking Design for Adaptivity Make your app Universal iphone and ipad

Multitasking Design for Adaptivity Make your app Universal iphone and ipad Design user experiences for Compact and Regular widths

Multitasking Design for Adaptivity Make your app Universal iphone and ipad Design user experiences for Compact and Regular widths Use Adaptivity to change between them

Multitasking Adapting to dynamic size changes Strategies Guidelines

Strategies 1: Be flexible

Strategies 1: Be flexible Try all the Multitasking cases

Strategies 1: Be flexible Try all the Multitasking cases Watch your app s UI carefully

Strategies 1: Be flexible Try all the Multitasking cases Watch your app s UI carefully Concentrate on layout

Strategies 1: Be flexible Slide Over

Strategies 1: Be flexible Slide Over Make it bigger

Strategies 1: Be flexible Slide Over Make it bigger

Strategies 1: Be flexible Slide Over Make it bigger Full screen

Strategies 1: Be flexible Slide Over Make it bigger Full screen

Strategies 1: Be flexible Slide Over Make it bigger Full screen Slide Over another app, and use Split View

Strategies 1: Be flexible Slide Over Make it bigger Full screen Slide Over another app, and use Split View

Strategies 1: Be flexible Slide Over Make it bigger Full screen Slide Over another app, and use Split View Rotate

Strategies 1: Be flexible Slide Over Make it bigger Full screen Slide Over another app, and use Split View Rotate

Strategies 2: Auto Layout

Strategies 2: Auto Layout The way to make your UI flexible

Strategies 2: Auto Layout The way to make your UI flexible You provide views and constraints

Strategies 2: Auto Layout The way to make your UI flexible You provide views and constraints Auto Layout sets your views frames

Strategies 2: Auto Layout The way to make your UI flexible You provide views and constraints Auto Layout sets your views frames Margins and guides

Strategies 2: Auto Layout The way to make your UI flexible You provide views and constraints Auto Layout sets your views frames Margins and guides Convenience APIs

Strategies 2: Auto Layout The way to make your UI flexible You provide views and constraints Auto Layout sets your views frames Margins and guides Convenience APIs Mysteries of Auto Layout, Part 1 Presidio Thursday 11AM Mysteries of Auto Layout, Part 2 Presidio Thursday 1:30PM

Strategies 2: Auto Layout

Strategies 2: Auto Layout let label = UILabel()

Strategies 2: Auto Layout let label = UILabel() let readablecontentguide = self.view.readablecontentguide

Strategies 2: Auto Layout let label = UILabel() let readablecontentguide = self.view.readablecontentguide

Strategies 2: Auto Layout let label = UILabel() let readablecontentguide = self.view.readablecontentguide let constraints = [ label.leadinganchor.constraintequaltoanchor( readablecontentguide.leadinganchor),

Strategies 2: Auto Layout let label = UILabel() let readablecontentguide = self.view.readablecontentguide let constraints = [ label.leadinganchor.constraintequaltoanchor( readablecontentguide.leadinganchor), ] label.trailinganchor.constraintequaltoanchor( readablecontentguide.trailinganchor)

Strategies 2: Auto Layout let label = UILabel() let readablecontentguide = self.view.readablecontentguide let constraints = [ label.leadinganchor.constraintequaltoanchor( readablecontentguide.leadinganchor), ] label.trailinganchor.constraintequaltoanchor( readablecontentguide.trailinganchor) NSLayoutConstraint.activateConstraints(constraints)

Strategies 3: Size Classes in Xcode

Strategies 3: Size Classes in Xcode Interface Builder (Storyboards and XIBs)

Strategies 3: Size Classes in Xcode Interface Builder (Storyboards and XIBs) Add or remove views and constraints

Strategies 3: Size Classes in Xcode Interface Builder (Storyboards and XIBs) Add or remove views and constraints Change attributes of views

Strategies 3: Size Classes in Xcode Interface Builder (Storyboards and XIBs) Add or remove views and constraints Change attributes of views Asset Catalogs

Strategies 3: Size Classes in Xcode Interface Builder (Storyboards and XIBs) Add or remove views and constraints Change attributes of views Asset Catalogs Use different versions of images

Strategies 3: Size Classes in Xcode

Strategies 3: Size Classes in Xcode

Strategies 3: Size Classes in Xcode

Strategies 3: Size Classes in Xcode

Strategies 3: Size Classes in Xcode

Strategies 3: Size Classes in Xcode

Strategies 3: Size Classes in Xcode

Strategies 3: Size Classes in Xcode

Strategies 4: Adaptivity callbacks

Strategies 4: Adaptivity callbacks override func willtransitiontotraitcollection( newcollection: UITraitCollection, withtransitioncoordinator coordinator: UIViewControllerTransitionCoordinator) { }

Strategies 4: Adaptivity callbacks override func willtransitiontotraitcollection( newcollection: UITraitCollection, withtransitioncoordinator coordinator: UIViewControllerTransitionCoordinator) { }

Strategies 4: Adaptivity callbacks override func willtransitiontotraitcollection( newcollection: UITraitCollection, withtransitioncoordinator coordinator: UIViewControllerTransitionCoordinator) { } override func viewwilltransitiontosize( size: CGSize, withtransitioncoordinator coordinator: UIViewControllerTransitionCoordinator) { }

Strategies 4: Adaptivity callbacks override func willtransitiontotraitcollection( newcollection: UITraitCollection, withtransitioncoordinator coordinator: UIViewControllerTransitionCoordinator) { } override func viewwilltransitiontosize( size: CGSize, withtransitioncoordinator coordinator: UIViewControllerTransitionCoordinator) { }

Strategies 4: Adaptivity callbacks override func willtransitiontotraitcollection( newcollection: UITraitCollection, withtransitioncoordinator coordinator: UIViewControllerTransitionCoordinator) {

Strategies 4: Adaptivity callbacks override func willtransitiontotraitcollection( newcollection: UITraitCollection, withtransitioncoordinator coordinator: UIViewControllerTransitionCoordinator) {

Strategies 4: Adaptivity callbacks override func willtransitiontotraitcollection( newcollection: UITraitCollection, withtransitioncoordinator coordinator: UIViewControllerTransitionCoordinator) { super.willtransitiontotraitcollection(newcollection, withtransitioncoordinator:coordinator)

Strategies 4: Adaptivity callbacks override func willtransitiontotraitcollection( newcollection: UITraitCollection, withtransitioncoordinator coordinator: UIViewControllerTransitionCoordinator) { super.willtransitiontotraitcollection(newcollection, withtransitioncoordinator:coordinator)

Strategies 4: Adaptivity callbacks override func willtransitiontotraitcollection( newcollection: UITraitCollection, withtransitioncoordinator coordinator: UIViewControllerTransitionCoordinator) { super.willtransitiontotraitcollection(newcollection, withtransitioncoordinator:coordinator) switch newcollection.horizontalsizeclass {

Strategies 4: Adaptivity callbacks override func willtransitiontotraitcollection( newcollection: UITraitCollection, withtransitioncoordinator coordinator: UIViewControllerTransitionCoordinator) { super.willtransitiontotraitcollection(newcollection, withtransitioncoordinator:coordinator) switch newcollection.horizontalsizeclass {

Strategies 4: Adaptivity callbacks override func willtransitiontotraitcollection( newcollection: UITraitCollection, withtransitioncoordinator coordinator: UIViewControllerTransitionCoordinator) { super.willtransitiontotraitcollection(newcollection, withtransitioncoordinator:coordinator) switch newcollection.horizontalsizeclass { case.compact: // Change your UI for a compact width case.regular: // Change your UI for a regular width case.unspecified: break // Do nothing } }

Strategies 4: Adaptivity callbacks override func willtransitiontotraitcollection( newcollection: UITraitCollection, withtransitioncoordinator coordinator: UIViewControllerTransitionCoordinator) { super.willtransitiontotraitcollection(newcollection, withtransitioncoordinator:coordinator) switch newcollection.horizontalsizeclass { case.compact: // Change your UI for a compact width case.regular: // Change your UI for a regular width case.unspecified: break // Do nothing } }

Strategies 4: Adaptivity callbacks override func willtransitiontotraitcollection( newcollection: UITraitCollection, withtransitioncoordinator coordinator: UIViewControllerTransitionCoordinator) { super.willtransitiontotraitcollection(newcollection, withtransitioncoordinator:coordinator)

Strategies 4: Adaptivity callbacks override func willtransitiontotraitcollection( newcollection: UITraitCollection, withtransitioncoordinator coordinator: UIViewControllerTransitionCoordinator) { super.willtransitiontotraitcollection(newcollection, withtransitioncoordinator:coordinator)

Strategies 4: Adaptivity callbacks override func willtransitiontotraitcollection( newcollection: UITraitCollection, withtransitioncoordinator coordinator: UIViewControllerTransitionCoordinator) { super.willtransitiontotraitcollection(newcollection, withtransitioncoordinator:coordinator) let animation = { (context: UIViewControllerTransitionCoordinatorContext) -> Void in // Change your UI here. It will animate from the old to the new. }

Strategies 4: Adaptivity callbacks override func willtransitiontotraitcollection( newcollection: UITraitCollection, withtransitioncoordinator coordinator: UIViewControllerTransitionCoordinator) { super.willtransitiontotraitcollection(newcollection, withtransitioncoordinator:coordinator) let animation = { (context: UIViewControllerTransitionCoordinatorContext) -> Void in // Change your UI here. It will animate from the old to the new. }

Strategies 4: Adaptivity callbacks override func willtransitiontotraitcollection( newcollection: UITraitCollection, withtransitioncoordinator coordinator: UIViewControllerTransitionCoordinator) { super.willtransitiontotraitcollection(newcollection, withtransitioncoordinator:coordinator) let animation = { (context: UIViewControllerTransitionCoordinatorContext) -> Void in // Change your UI here. It will animate from the old to the new. } coordinator.animatealongsidetransition(animation, completion: nil) }

Strategies 4: Adaptivity callbacks override func willtransitiontotraitcollection( newcollection: UITraitCollection, withtransitioncoordinator coordinator: UIViewControllerTransitionCoordinator) { super.willtransitiontotraitcollection(newcollection, withtransitioncoordinator:coordinator) let animation = { (context: UIViewControllerTransitionCoordinatorContext) -> Void in // Change your UI here. It will animate from the old to the new. } coordinator.animatealongsidetransition(animation, completion: nil) }

Strategies 5: High-level API

Strategies 5: High-level API Adaptive Presentation Controllers

Strategies 5: High-level API Adaptive Presentation Controllers UITableView

Strategies 5: High-level API Adaptive Presentation Controllers UITableView UICollectionView

Strategies 5: High-level API Adaptive Presentation Controllers UITableView UICollectionView UIStackView

Strategies 5: High-level API Adaptive Presentation Controllers UITableView UICollectionView UIStackView Mysteries of Auto Layout, Part 1 Presidio Thursday 11AM

Strategies 6: Split View Controller

Split View Controller UISplitViewController

Split View Controller UISplitViewController Primary UIViewController Secondary UIViewController

Split View Controller UISplitViewController Primary UIViewController Secondary UIViewController

Split View Controller UISplitViewController Primary UIViewController Secondary UIViewController

Split View Controller UISplitViewController Primary UIViewController Secondary UIViewController

Split View Controller Xcode template

Strategies Be flexible Auto Layout Size Classes in Xcode Adaptivity Callbacks High-level API Split View Controller

Strategies Sample code AdaptivePhotos

Multitasking Adapting to dynamic size changes Strategies Guidelines

Guidelines The user controls your app s size

Guidelines The user controls your app s size The app cannot prevent size changes

Guidelines The user controls your app s size The app cannot prevent size changes It cannot cause size changes either

Guidelines The user controls your app s size The app cannot prevent size changes It cannot cause size changes either Size changes can happen at any time

Guidelines Keep the user oriented

Guidelines Keep the user oriented Home Work School Chores Sleep Code Fix Bugs Coffee Read Write

Regular Width Home Chores Sleep Work Code Fix Bugs Coffee School

Chores Sleep Work Code Fix Bugs Coffee School Read Write Regular Width

Compact Width Home Work School Chores Sleep Code Fix Bugs Coffee Read Write

Compact Width Home Work School Chores Sleep Code Fix Bugs Coffee Read Write

Home Chores Sleep Work Code Fix Bugs Coffee School

Home Chores Sleep Work Code Fix Bugs Coffee School

Chores Sleep Work Code Fix Bugs Coffee School Read Write

Chores Sleep Work Code Fix Bugs Coffee School Read Write

Home Chores Sleep Work Code Fix Bugs Coffee School Read Write

Home Chores Sleep Work Code Fix Bugs Coffee School Read Write

Home Work School Chores Sleep Code Fix Bugs Coffee Read Write

Guidelines Keep the user oriented

Guidelines Keep the user oriented Don t make abrupt jumps

Guidelines Keep the user oriented Don t make abrupt jumps Be smart in new ways

Guidelines Keep the user oriented Don t make abrupt jumps Be smart in new ways Especially going from large to small

Guidelines After becoming inactive

Guidelines After becoming inactive Your app s size may change

Guidelines After becoming inactive Your app s size may change Adaptivity methods are still called, but nothing is visible

Guidelines After becoming inactive Your app s size may change Adaptivity methods are still called, but nothing is visible The system restores the original size

1. App is active and Compact Work Code Fix Bugs Coffee

1. App is active and Compact Work 2. User presses Home button Code Fix Bugs Coffee

1. App is active and Compact Work 2. User presses Home button 3. System takes snapshot Code Fix Bugs Coffee

Home 1. App is active and Compact 2. User presses Home button Chores Sleep 3. System takes snapshot 4. System resizes app to Regular Work Code Fix Bugs Coffee

Home 1. App is active and Compact 2. User presses Home button Chores Sleep 3. System takes snapshot 4. System resizes app to Regular Work 5. System takes another snapshot Code Fix Bugs Coffee

1. App is active and Compact Home 2. User presses Home button 3. System takes snapshot 4. System resizes app to Regular Chores Sleep 5. System takes another snapshot 6. System resizes app to Compact

1. App is active and Compact Home 2. User presses Home button 3. System takes snapshot 4. System resizes app to Regular Chores Sleep 5. System takes another snapshot 6. System resizes app to Compact 7. User activates app

1. App is active and Compact Home Work 2. User presses Home button 3. System takes snapshot 4. System resizes app to Regular 5. System takes another snapshot Chores Code Sleep Fix Bugs Coffee 6. System resizes app to Compact 7. User activates app 8. System shows snapshot from step 3

1. App is active and Compact Home Work 2. User presses Home button 3. System takes snapshot 4. System resizes app to Regular 5. System takes another snapshot Chores Code Sleep Fix Bugs Coffee 6. System resizes app to Compact 7. User activates app 8. System shows snapshot from step 3 9. Fades into live app

Home 1. App is active and Compact 2. User presses Home button Chores Sleep 3. System takes snapshot 4. System resizes app to Regular Work 5. System takes another snapshot Code Fix Bugs Coffee

1. App is active and Compact Work 2. User presses Home button 3. System takes snapshot 4. System resizes app to Regular 5. System takes another snapshot Code Fix Bugs Coffee 6. System resizes app to Compact

1. App is active and Compact Work 2. User presses Home button 3. System takes snapshot 4. System resizes app to Regular 5. System takes another snapshot Code Fix Bugs Coffee 6. System resizes app to Compact 7. User activates app

1. App is active and Compact Work 2. User presses Home button 3. System takes snapshot 4. System resizes app to Regular 5. System takes another snapshot Code Fix Bugs Coffee 6. System resizes app to Compact 7. User activates app 8. System shows snapshot from step 3

1. App is active and Compact Work 2. User presses Home button 3. System takes snapshot 4. System resizes app to Regular 5. System takes another snapshot Code Fix Bugs Coffee 6. System resizes app to Compact 7. User activates app 8. System shows snapshot from step 3 9. Fades into live app

Guidelines After becoming inactive Maintain the same appearance

Guidelines After becoming inactive Maintain the same appearance On deactivation: Remember your size and state

Guidelines After becoming inactive Maintain the same appearance On deactivation: Remember your size and state On size change: if inactive && newsize == originalsize - Then apply the remembered state

Primary App

Secondary App

Guidelines External display

Guidelines External display Only seen by the primary app

Guidelines Performance

Guidelines Performance When the size changes, do as little work as possible

Guidelines Performance When the size changes, do as little work as possible Use completion blocks for slow work

Guidelines Performance When the size changes, do as little work as possible Use completion blocks for slow work In animation blocks, don t call layoutifneeded

Guidelines Performance When the size changes, do as little work as possible Use completion blocks for slow work In animation blocks, don t call layoutifneeded Use setneedslayout

Multitasking Adapting to dynamic size changes Strategies Guidelines

Adopting Multitasking in ios 9 Summary Adopt Multitasking in your app Use Adaptivity You can deliver a great user experience

More Information Documentation What s New in ios ios App Programming Guide Technical Support Apple Developer Forums Developer Technical Support Adopting Multitasking Enhancements on ipad General Inquiries Sample Code AdaptivePhotos Curt Rothert, App Frameworks Evangelist rothert@apple.com Lister http://developer.apple.com/ios

Related Sessions Multitasking Essentials for Media-Based Apps on ipad in ios 9 Mission Wednesday 2:30PM Optimizing Your App for Multitasking in ios Presidio Wednesday 3:30PM Cocoa Touch and Multitasking Lab Frameworks Lab B Wednesday 9:00AM, 3:30PM