Xamarin.iOS에서 통합된 StoryboardsUnified Storyboards in Xamarin.iOS

iOS 8 사용자 인터페이스를 만드는 방법에 대 한 새, 사용 하기 간단한 메커니즘을 포함-스토리 보드를 통합된 합니다.iOS 8 includes a new, simpler-to-use mechanism for creating the user interface — the unified storyboard. 모든 다른 하드웨어 화면 크기에 맞게 단일 스토리 보드를 사용 하 여 신속 하 고 응답성이 보기를 만들 수에 "디자인-한 번, 사용 하 여 다" 스타일입니다.With a single storyboard to cover all of the different hardware screen sizes, fast and responsive views can be created in a "design-once, use-many" style.

개발자는 더 이상 iPhone 및 iPad 장치에 대 한 별도 및 특정 스토리 보드를 만들 해야, 공통 인터페이스를 사용 하 여 응용 프로그램을 디자인 하 고, 해당 인터페이스를 다양 한 크기 클래스에 대 한 사용자 지정 하는 유연성이 갖습니다.As the developer no longer needs to create a separate and specific storyboard for iPhone and iPad devices, they have the flexibility to design applications with a common interface and then customize that interface for different size classes. 이러한 방식으로 응용 프로그램의 폼 팩터 각 수준에 적용할 수 있습니다 하 고 최상의 환경을 제공 하기 위해 각 사용자 인터페이스를 조정할 수 있습니다.In this way, an application can be adapted to the strengths of each form factor and each user interface can be tuned to provide the best experience.

Size 클래스Size Classes

IOS 8 하기 전에 개발자가 사용한 UIInterfaceOrientationUIInterfaceIdiom iPhone 및 iPad 장치 간에 가로 및 세로 모드 사이 구분 하기 위해.Prior to iOS 8, the developer used UIInterfaceOrientation and UIInterfaceIdiom to differentiate between portrait and landscape modes, and between iPhone and iPad devices. Ios8에 전송, 방향 및 장치가 결정 됩니다 사용 하는 것 Size 클래스합니다.In iOS8, orientation and device is determined is by using Size Classes.

장치 세로 및 가로 축에서 크기 클래스에 의해 정의 된 및 iOS 8에서에서 size 클래스의 두 종류가 있습니다.Devices are defined by Size Classes, in both vertical and horizontal axes, and there are two types of size classes in iOS 8:

  • 일반 – (iPad)와 같은 큰 화면 크기 또는 큰 크기의 느낌을 제공 하는 가젯의입니다 (예는 UIScrollViewRegular – This is for either a large screen size (such as an iPad) or a gadget that gives the impression of a large size (such as a UIScrollView
  • Compact – 더 작은 장치 (예: iPhone)입니다.Compact – This is for smaller devices (such as an iPhone). 이 크기는 장치의 방향을 고려 합니다.This size takes into account the orientation of the device.

두 가지 개념을 함께 사용할 경우 결과 다음 다이어그램에 표시 된 대로 모두 서로 다른 방향에서 사용할 수 있는 가능한 다양 한 크기를 정의 하는 2x2 표:If the two concepts are used together, the result is a 2 x 2 grid that defines the different possible sizes that can be used in both the differing orientations, as seen in the following diagram:

개발자 (처럼 위의 그림에서) 다른 레이아웃 초래 하는 네 가지 가능성 중 하나를 사용 하는 뷰 컨트롤러를 만들 수 있습니다.The developer can create a View Controller that uses any of the four possibilities that would result in different layouts (as seen in the graphics above).

iPad Size 클래스iPad Size Classes

IPad의 경우 크기 때문에 일반 두 방향 모두에 대 한 크기 클래스입니다.The iPad, due to the size, has a regular class size for both orientations.

iPhone Size 클래스iPhone Size Classes

IPhone 장치 방향에 따라 다른 크기 클래스에 있습니다.The iPhone has different size classes based on the orientation of the device:

  • 장치 세로 모드일 때 화면에는 compact 가로로 클래스 및 일반 세로로When the device is in portrait mode, the screen has a compact class horizontally and regular vertically
  • 장치 가로 모드의 경우에 세로 모드에서 화면 클래스 바뀝니다.When the device is in landscape mode, the screen classes are reversed from portrait mode.

iPhone 6 Plus Size 클래스iPhone 6 Plus Size Classes

크기를 가로 방향의 다르지만 세로 방향으로 작업 하는 경우 이전 Iphone로 동일 합니다.The sizes are the same as the earlier iPhones when in portrait orientation, but different in landscape:

때문에 iPhone 6 Plus 충분히 큰 화면에 가로 모드에서 일반 너비 크기 클래스를 가질 수 있습니다.Because the iPhone 6 Plus has a large enough screen, it is able to have a Regular Width Size Class in the Landscape mode.

새 화면 확장에 대 한 지원Support for a New Screen Scale

IPhone 6 Plus의 (3 번 원래 iPhone 화면 해상도) 3.0 화면 배율 인수를 사용 하 여 새 HD 레 티 나 디스플레이 사용 합니다.The iPhone 6 Plus uses a new Retina HD display with a screen scale factor of 3.0 (three times the original iPhone screen resolution). 이러한 장치에서 가능한 최상의 환경을 위해이 화면 확장을 위한 새 아트 워크를 포함 합니다.To provide the best possible experience on these devices, include new artwork designed for this screen scale. 카탈로그에서 1 x, x 2 및 3 x 크기에 이미지를 포함할 수 있습니다 Xcode 6 이상에서 자산 iPhone 6에서 실행 하는 경우는 올바른 자산 선택 새 이미지 자산 및 iOS를 추가 하기만 하면 Plus입니다.In Xcode 6 and above, asset catalogs can include images at 1x, 2x, and 3x sizes; simply add the new image assets and iOS will choose the correct assets when running on an iPhone 6 Plus.

또한 iOS의 동작을 로드 하는 이미지 인식는 @3x 이미지 파일에는 접미사입니다.The image loading behavior in iOS also recognizes an @3x suffix on image files. 예를 들어, 개발자는 다음 파일 이름 사용 하 여 응용 프로그램의 번들에서 이미지 자산 (다른 해상도)를 포함 하는 경우: MonkeyIcon.png, MonkeyIcon@2x.png, 및 MonkeyIcon@3x.png합니다.For example, if the developer includes an image asset (at different resolutions) in the application's bundle with the following file names: MonkeyIcon.png, MonkeyIcon@2x.png, and MonkeyIcon@3x.png. Iphone 6 Plus의 MonkeyIcon@3x.png 이미지는 자동으로 개발자는 다음 코드를 사용 하 여 이미지를 로드 하는 경우:On the iPhone 6 Plus the MonkeyIcon@3x.png image will be used automatically if the developer loads an image using the following code:

UIImage icon = UIImage.FromFile("MonkeyImage.png");

이미지는 iOS를 사용 하 여 UI 요소에 할당 하는 경우 또는 디자이너 MonkeyIcon.png, MonkeyIcon@3x.png 에 사용 될를 자동으로 다시 iPhone 6 Plus입니다.Or if they assign the image to a UI element using the iOS Designer as MonkeyIcon.png, the MonkeyIcon@3x.png will be used, again automatically, on the iPhone 6 Plus.

동적 시작 화면Dynamic Launch Screens

시작 화면 파일은 앱은 실제로 시작 하는 사용자에 게 피드백을 제공 하도록 iOS 응용 프로그램은 시작 하는 동안 시작 화면으로 표시 됩니다.The launch screen file is displayed as a splash screen while an iOS application is launching to provide feedback to the user that the app is actually starting-up. IOS 8 하기 전에 개발자 포함 하기로 여러 Default.png 이미지에 응용 프로그램은 실행 하는 각 장치 유형, 방향 및 화면 해상도 대 한 자산입니다.Prior to iOS 8, the developer would have to include multiple Default.png image assets for each device type, orientation and screen resolution that the application would be running on.

새 ios 8, 개발자는 단일 원자 단위를 만들 수 있습니다 .xib 자동 레이아웃 및 Size 클래스를 사용 하는 Xcode에서 파일을 동적 시작 화면 하는 모든 장치, 해상도 및 방향에 대해 작동 합니다.New to iOS 8, the developer can create a single, atomic .xib file in Xcode that uses Auto Layout and Size Classes to create a Dynamic Launch Screen that will work for every device, resolution and orientation. 이 뿐만 아니라 개발자 만들고 모든 필요한 이미지 자산, 유지 관리 하는 데 필요한 작업 양을 줄어들지만 응용 프로그램의 설치 된 번들의 크기가 줄어듭니다.This not only reduces the amount of work required of the developer to create and maintain all the required image assets, but it reduces the size of the application's installed bundle.

특성Traits

특성은 해당 환경 변경 사항으로 레이아웃을 변경 하는 방법을 결정 하는 속성입니다.Traits are properties that can be used to determine how a layout changes as its environment changes. 속성 집합으로 구성 됩니다 (합니다 HorizontalSizeClassVerticalSizeClass 기반으로 UIUserInterfaceSizeClass), 인터페이스 관용구 뿐만 아니라 ( UIUserInterfaceIdiom) 및 표시 크기 조정 합니다.They consist of a set of properties (the HorizontalSizeClass and VerticalSizeClass based on UIUserInterfaceSizeClass), as well as the interface idiom ( UIUserInterfaceIdiom) and the display scale.

위의 상태 중 모든 Apple 특성 (trait) 컬렉션으로 참조 하는 컨테이너 래핑되기 됩니다 ( UITraitCollection), 속성 뿐만 아니라 해당 값을 포함 하는 합니다.All of the above states are wrapped up in a container that Apple refers to as a Trait Collection ( UITraitCollection), which contains not only the properties but their values as well.

특성 (trait) 환경Trait Environment

특성 (trait) 환경 iOS 8의에서 새로운 인터페이스 되며 다음 개체에 대 한 특성 (trait) 컬렉션을 반환할 수 있습니다.Trait Environments are a new interface in iOS 8 and are able to return a Trait Collection for the following objects:

  • 화면 ( UIScreens ).Screens ( UIScreens ).
  • Windows ( UIWindows ).Windows ( UIWindows ).
  • 컨트롤러 보기 ( UIViewController ).View Controllers ( UIViewController ).
  • 뷰 ( UIView ).Views ( UIView ).
  • 프레젠테이션 컨트롤러 ( UIPresentationController ).Presentation Controller ( UIPresentationController ).

개발자는 사용자 인터페이스를 배치 하는 하는 방법을 확인 하려면 특성 (trait) 환경에서 반환 되는 특성 (trait) 컬렉션을 사용 합니다.The developer uses the Trait Collection returned by a Trait Environment to determine how a user interface should be laid out.

모든 특성 (trait) 환경을 다음 다이어그램에 표시 된 것과 같이 계층 구조를 확인 합니다.All of the Trait Environments make a hierarchy as seen in the following diagram:

특성 (trait) 컬렉션 부모 개체에서 자식 환경 수는 기본적으로 흐름은 포함 하는 위의 특성 (trait) 환경.The Trait Collection that each of the above Trait Environments have will flow, by default, from the parent to the child environment.

현재 특성 (trait) 컬렉션을 시작 하는 것 외에도 특성 (trait) 환경에는 TraitCollectionDidChange 메서드 보기 또는 뷰 컨트롤러 서브 클래스에서 재정의할 수 있습니다.In addition to getting the current Trait Collection, the Trait Environment has a TraitCollectionDidChange method, which can be overridden in the View or View Controller subclasses. 개발자가이 메서드를 사용 하 여 모든 해당 특성 변경 된 경우 특성에 의존 하는 UI 요소를 수정할 수 있습니다.The developer can use this method to modify any of the UI elements that depend on traits when those traits have changed.

일반적인 특성 (trait) 컬렉션Typical Trait Collections

이 섹션에서는 일반적인 유형의 사용자 iOS 8 사용 하 여 작업할 때 발생 하는 특성 (trait) 컬렉션을 다룰 것입니다.This section will cover the typical types of trait collections that the user will experience when working with iOS 8.

다음은 개발자 iPhone에서 볼 수 있는 일반적인 특성 (trait) 컬렉션입니다.The following is a typical Trait Collection that the developer might see on an iPhone:

속성Property Value
HorizontalSizeClass CompactCompact
VerticalSizeClass 기본Regular
UserInterfaceIdom 전화 번호Phone
DisplayScale 2.02.0

위 집합의 모든 특성 (trait) 속성에 대 한 값을 포함 하는 대로 완벽 하 게 정규화 된 특성 (trait) 컬렉션을 나타냅니다.The above set would represent a Fully Qualified Trait Collection, as it has values for all of its trait properties.

해당 값의 일부 누락 된 특성 (trait) 컬렉션을 가질 수 이기도 (Apple로 참조 하는 Unspecified):It is also possible to have a Trait Collection that is missing some of its values (which Apple refers to as Unspecified):

속성Property Value
HorizontalSizeClass CompactCompact
VerticalSizeClass 지정되지 않음Unspecified
UserInterfaceIdom 지정되지 않음Unspecified
DisplayScale 지정되지 않음Unspecified

그러나 일반적으로 개발자 특성 (trait) 환경 특성 (trait) 컬렉션을 요청 하는 경우 해당 컬렉션을 반환 합니다 정규화 위의 예에서 볼 수 있듯이 합니다.Generally, however, when the developer asks the Trait Environment for its Trait Collection, it will return a fully qualified collection as seen in the example above.

특성 (trait) 환경 (예: 보기 또는 뷰 컨트롤러) 현재 뷰 계층 구조 내에서 없으면 개발자 수 값을 얻으려면 다시 지정 되지 않은 하나 이상의 특성 (trait) 속성에 대 한 합니다.If a Trait Environment (like a View or View Controller) is not inside of the current view hierarchy, the developer might get back unspecified values for one or more of the trait properties.

와 같은 Apple에서 제공 하는 생성 메서드 중 하나를 사용 하는 경우 개발자는 부분적으로 정규화 된 특성 (trait) 컬렉션을 가져올 수도 UITraitCollection.FromHorizontalSizeClass새 컬렉션을 만듭니다.The developer will also get a partially qualified Trait Collection if they use one of the creation methods provided by Apple, such as UITraitCollection.FromHorizontalSizeClass, to create a new collection.

여러 특성 (trait) 컬렉션에 대해 수행할 수 있는 하나의 작업은 비교 하 여 서로 다른 포함 된 경우 하나의 특성 (trait) 컬렉션 요청 포함 됩니다.One operation that can be performed on multiple Trait Collections is comparing them to each other, which involves asking one Trait Collection if it contains another one. 이란 포함 , 두 번째 컬렉션에 지정 된 모든 특성에 대 한 값이 일치 하도록 첫 번째 컬렉션의 값과 정확 하 게 됩니다.What is meant by Containment is that, for any trait specified in the second collection, the value must match exactly with the value in the first collection.

테스트 하려면 두 가지 특성을 사용 합니다 Contains 메서드는 UITraitCollection 테스트할 특성의 값을 전달 합니다.To test two traits use the Contains method of the UITraitCollection passing in the value of the trait to be tested.

개발자 수동으로 수행할 수 비교를 확인 하는 코드의 레이아웃 보기 또는 뷰 컨트롤러에 대 한 방법입니다.The developer can perform the comparisons manually in code to determine how to layout Views or View Controllers. 그러나 UIKit 모양을 프록시와 같이 해당 기능의 예를 들어 제공 내부적으로이 메서드를 사용 합니다.However, UIKit uses this method internally to provide some of its functionality, as in the Appearance Proxy, for example.

모양 프록시Appearance Proxy

모양을 프록시는 해당 뷰의 속성을 사용자 지정할 수 있도록 하는 iOS의 이전 버전에서 도입 되었습니다.The Appearance Proxy was introduced in earlier versions of iOS to allow developers to customize the properties of their Views. Ios 8 특성 (trait) 컬렉션을 지원 하도록 확장 되었습니다.It has been extended in iOS 8 to support Trait Collections.

모양을 프록시는 이제 새로운 메서드를 포함 AppearanceForTraitCollection에 전달 된 지정된 된 특성 (trait) 컬렉션에 대 한 새 모양을 프록시를 반환 합니다.Appearance Proxies now include a new method, AppearanceForTraitCollection, that returns a new Appearance Proxy for the given Trait Collection that has been passed in. 개발자는 수행 하는 모든 사용자 지정 모양을 프록시만 적용 됩니다 따르는 뷰에 지정된 된 특성 (trait) 컬렉션에 있습니다.Any customizations that the developer performs on that Appearance Proxy will only take effect on Views that conform to the specified Trait Collection.

부분적으로 지정 된 특성 (trait) 컬렉션에 개발자가 전달 하는 일반적으로 AppearanceForTraitCollection 지정 된 가로 크기 클래스의 압축을 가로로 압축 된 응용 프로그램의 보기 중 하나를 사용자 지정할 수 있도록 하는 등의 방법을 합니다.Generally the developer will pass in a partially specified Trait Collection to the AppearanceForTraitCollection method, such as one that just specified a Horizontal Size Class of Compact, so that they could customize any view in the application that is compact horizontally.

UIImageUIImage

컬렉션 특성 (trait)은 Apple에 추가 하는 다른 클래스 UIImage합니다.Another class that Apple has added Trait Collection to is UIImage. 과거에 개발자 지정 해야는 @1X 및 @2x 있습니다 (예: 아이콘) 응용 프로그램에 포함 하려고 하는 모든 비트맵 그래픽 자산의 버전입니다.In the past the developer had to specify a @1X and @2x version of any bitmapped graphic asset that they were going to include in the application (such as an icon).

iOS 8 개발자 특성 (trait) 컬렉션을 기반으로 하는 이미지 카탈로그에 여러 버전의 이미지를 포함할 수 있도록 확장 되었습니다.iOS 8 has been expanded to allow the developer to include multiple version of an image in an Image Catalog based on a Trait Collection. 예를 들어 개발자는 Compact 특성 (trait) 클래스 및 다른 컬렉션에 대 한 전체 크기 이미지를 사용 하 여 작업에 대 한 더 작은 이미지를 포함할 수 있습니다.For example, the developer could include a smaller image for working with a Compact Trait Class and a full sized image for any other collection.

내부에서 사용 하면 이미지 중 하나는 UIImageView 이미지 뷰 클래스 특성 (trait) 컬렉션에 대 한 올바른 버전의 이미지를 자동으로 표시 됩니다.When one of the images is used inside of a UIImageView class, the Image View will automatically display the correct version of the image for its Trait Collection. 이미지 보기 새 특성 (trait) 컬렉션과 일치 되는 이미지의 현재 버전에 맞게 크기를 변경 하는 새 이미지 크기를 자동으로 선택 됩니다 특성 (trait) 환경 (예: 가로 세로에서 장치를 전환 사용자) 변경 하는 경우 표시 됩니다.If the Trait Environment changes (such as the user switching the device from portrait to landscape), the Image View will automatically select the new image size to match the new Trait Collection and change its size to match that of the current version of the image being displayed.

UIImageAssetUIImageAsset

Apple이 호출 하 여 iOS 8 새 클래스 추가 UIImageAsset 제어할 수 있도록 개발자 더욱 이미지 선택 합니다.Apple has added a new class to iOS 8 called UIImageAsset to give the developer even more control over image selection.

이미지의 서로 다른 버전의 모든 이미지 자산을 래핑하고 개발자가 전달 하는 특성 (trait) 컬렉션에 일치 하는 특정 이미지를 요청할 수 있습니다.An Image Asset wraps up all of the different versions of an image and allows the developer to ask for a specific image that matches a Trait Collection that has been passed in. 이미지를 추가 하거나 이미지 자산에서 제거할 수 즉석에서.Images can be added or removed from an Image Asset, on-the-fly.

이미지 자산에 대 한 자세한 내용은 Apple의을 참조 하세요 UIImageAsset 설명서.For more information on Image Assets, see Apple's UIImageAsset documentation.

특성 (trait) 컬렉션을 결합합니다.Combining Trait Collections

더할 두와 개발자는 특성 (trait) 컬렉션에 대해 수행할 수 있는 다른 함수는 하나의 컬렉션에서 지정 되지 않은 값을 지정 된 두 번째 값을 기준으로 바뀌는 결합 된 컬렉션에 발생 합니다.Another function that a developer can perform on Trait Collections is to add two together that will result in the combined collection, where the unspecified values from one collection are replaced by the specified values in a second one. 이렇게 사용 하 여는 FromTraitsFromCollections 메서드는 UITraitCollection 클래스입니다.This is done using the FromTraitsFromCollections method of the UITraitCollection class.

특성 (trait) 컬렉션 중 하나에 지정 되지 않은 특성 중 하나를 다른 지정 된 경우, 위에서 설명한 대로 값을 지정 된 버전으로 설정 됩니다.As stated above, if any of the traits is unspecified in one of the Trait Collections and is specified in another, the value will be set to the specified version. 그러나 지정 된 지정된 된 값의 여러 버전의 경우 마지막 값 특성 (trait) 컬렉션이 됩니다 사용 되는 값입니다.However, if there are multiple versions of a given value specified, the value from the last Trait Collection will be the value that is used.

적응 뷰 컨트롤러Adaptive View Controllers

이 섹션에서는 iOS 뷰 컨트롤러 및 보기 특성 및 Size 클래스를 자동으로 개발자의 응용 프로그램에서 적응성의 개념을 채택 했습니다 하는 방법의 세부 정보를 설명 합니다.This section will cover the details of how the iOS View and View Controllers have adopted the concepts of Traits and Size Classes to automatically be more adaptive in the developer's applications.

분할 뷰 컨트롤러Split View Controller

IOS 8에서 가장 많이 변경 된 뷰 컨트롤러 클래스 중 하나는 UISplitViewController 클래스입니다.One of the View Controller classes that has changed the most in iOS 8 is the UISplitViewController class. 과거에는 개발자는 자주 사용 하 여 분할 뷰 컨트롤러 iPad 버전 응용 프로그램의 다음 문서를 업로드 하려면 앱의 iPhone 버전에 대 한 완전히 다른 버전의 해당 뷰 계층 구조를 제공 하며In the past, the developer would often use a Split View Controller on the iPad version of the application and then they would have to provide a completely different version of their view hierarchy for the iPhone version of the app.

Ios 8 UISplitViewController 클래스입니다. (iPad 및 iPhone), 두 가지 플랫폼에서 사용할 수 있는 개발자가 iPhone 및 iPad 용 작동 한 뷰 컨트롤러 계층 구조를 만들 수 있습니다.In iOS 8, the UISplitViewController class is available on both platforms (iPad and iPhone), which allows the developer to create one View Controller hierarchy that will function for both iPhone and iPad.

가로 방향의 iPhone 때 분할 뷰 컨트롤러 iPad에 표시 되는 경우와 마찬가지로 해당 보기--나란히 표시 됩니다.When an iPhone is in Landscape, the Split View Controller will present its Views side-by-side, just as it would when being displayed on an iPad.

특성 재정의Overriding Traits

가로 방향의 iPad에서 분할 뷰 컨트롤러를 보여 주는 다음 그림 처럼 자식 컨테이너에까지 부모 컨테이너에서 계단식으로 배열 특성 (trait) 환경.Trait Environments cascade from the parent container down to the child containers, as in the following graphic showing a Split View Controller on an iPad in the landscape orientation:

IPad 가로 및 세로 방향에서 일반 크기 클래스에 있으므로 분할 보기에는 마스터와 세부 정보 보기가 표시 됩니다.Since the iPad has a Regular Size Class in both the horizontal and vertical orientations, the Split View will display both the master and detail views.

여기서은 Size 클래스는 두 방향 모두에서 압축, iPhone에서 분할 뷰 컨트롤러만 표시 세부 정보 보기, 아래와 같이:On an iPhone, where the Size Class is compact in both orientations, the Split View Controller only displays the detail view, as seen below:

개발자는 가로 방향의 iPhone에서 마스터와 세부 정보 보기를 표시 하려는 응용 프로그램에서 개발자는 분할 뷰 컨트롤러에 대 한 부모 컨테이너를 삽입 하 고 특성 (trait) 컬렉션을 재정의 해야 합니다.In an application where the developer wants to display both the master and detail view on an iPhone in the landscape orientation, the developer must insert a parent container for the Split View Controller and override the Trait Collection. 아래 그림에서 볼 수 있듯이:As seen in the graphic below:

A UIView 분할 뷰 컨트롤러의 부모로 설정 됩니다 및 SetOverrideTraitCollection 새 특성 (trait) 컬렉션을 전달 하 고 분할 뷰 컨트롤러를 대상으로 하는 보기에서 메서드를 호출 합니다.A UIView is set as the parent of the Split View Controller and the SetOverrideTraitCollection method is called on the view passing in a new Trait Collection and targeting the Split View Controller. 새 특성 (trait) 컬렉션을 재정의 합니다 HorizontalSizeClass로 설정 Regular분할 뷰 컨트롤러에서 가로 방향 iPhone에서 마스터와 세부 정보 보기 표시 되도록 합니다.The new Trait Collection overrides the HorizontalSizeClass, setting it to Regular, so that the Split View Controller will display both the master and detail views on an iPhone in the landscape orientation.

VerticalSizeClass 로 설정 된 unspecified는 부모 특성 (trait) 컬렉션에 추가할 새 특성 (trait) 컬렉션을 사용 하면 그 결과 Compact VerticalSizeClass 자식 분할 뷰 컨트롤러에 대 한 합니다.Note that the VerticalSizeClass was set to unspecified, which allows the new Trait Collection to be added to the Trait Collection on the parent, resulting in a Compact VerticalSizeClass for the child Split View Controller.

특성 (trait) 변경Trait Changes

이 섹션에서는 살펴보겠습니다, 특성 (trait) 컬렉션 특성 (trait) 환경이 변경 되는 때를 전환 하는 방법에 대해 자세히 설명 합니다.This section will take a look, in detail, at how the Trait Collections transition when the Trait Environment changes. 예를 들어 경우 세로에서 가로로 장치 회전 됩니다.For example, when the device is rotated from portrait to landscape.

먼저 iOS 8 수행으로 전환에 대 한 준비 하려면 일부 설치를 수행 합니다.First, iOS 8 does some setup to prepare for the transition to take place. 다음으로, 시스템 전환 상태에 애니메이션을 적용 합니다.Next, the system animates the transition state. 마지막으로, iOS 8 정리 전환 하는 동안 필요한 모든 임시 상태입니다.Finally, iOS 8 cleans-up any temporary states required during the transition.

iOS 8에 개발자는 다음 표에 표시 된 것과 같이 특성 (trait) 변경에 참여 하는 데 사용할 수 있는 몇 가지 콜백을 제공 합니다.iOS 8 provides several callbacks that the developer can use to participate in the Trait Change as seen in the following table:

PhasePhase CallbackCallback 설명Description
설정Setup
  • WillTransitionToTraitCollection
  • TraitCollectionDidChange
  • 이 메서드는 특성 (trait) 컬렉션을 가져옵니다 새 값으로 설정 하기 전에 특성 변경의 시작 부분에서 호출 됩니다.This method gets called at the beginning of a Trait Change before a Trait Collection gets set to its new value.
  • 메서드는 특성 (trait) 컬렉션의 값이 변경 되지만 모든 애니메이션 수행 되기 전에 호출 됩니다.The method gets called when the value of the Trait Collection has changed but before any animation takes place.
애니메이션Animation WillTransitionToTraitCollection 이 메서드에 전달 되는 전환 코디네이터에는 AnimateAlongside 속성을 사용 하는 개발자가 기본 애니메이션 함께 실행 되는 애니메이션을 추가 합니다.The Transition Coordinator that gets passed to this method has an AnimateAlongside property that allows the developer to add animations that will be executed along with the default animations.
정리Clean-up WillTransitionToTraitCollection 전환이 발생 한 후 자체 정리 코드를 포함 하는 개발자를 위한 메서드를 제공 합니다.Provides a method for developers to include their own cleanup code after the transition takes place.

WillTransitionToTraitCollection 메서드는 특성 컬렉션 변경 내용을 함께 보기 컨트롤러에 애니메이션 효과 매우 유용 합니다.The WillTransitionToTraitCollection method is great for animating View Controllers along with the Trait Collection changes. 합니다 WillTransitionToTraitCollection 메서드는 뷰 컨트롤러에서 사용할 수 있습니다만 ( UIViewController) 및 다른 특성 (trait) 환경에 없는 같은 UIViews합니다.The WillTransitionToTraitCollection method is only available on View Controllers ( UIViewController) and not on other Trait Environments, like UIViews.

TraitCollectionDidChange 작업에 적합 합니다 UIView 특성을 변경 하는 대로 UI를 업데이트 하기 위해 개발자가 있는 클래스입니다.The TraitCollectionDidChange is great for working with the UIView class, where the developer wants to update the UI as the traits are changing.

분할 뷰 컨트롤러를 축소합니다.Collapsing the Split View Controllers

이제 보겠습니다 take 어떤 자세히 열씩 보기로 두 열에서 분할 뷰 컨트롤러 축소 될 때 발생 합니다.Now let's take a closer look at what happens when a Split View Controller collapses from a two column to a one column view. 이 변경의 일부로 발생 해야 하는 프로세스 두 가지 있습니다.As part of this change, there are two processes that need to occur:

  • 기본적으로 분할 뷰 컨트롤러는 사용 하 여 기본 뷰 컨트롤러 뷰로 축소 후 합니다.By default, the Split View Controller will use the primary view controller as the view after the collapse occurs. 개발자를 재정의 하 여이 동작을 재정의할 수는 GetPrimaryViewControllerForCollapsingSplitViewController 메서드의 UISplitViewControllerDelegate 축소 된 상태로 표시 하고자 하는 뷰 컨트롤러를 제공 합니다.The developer can override this behavior by overriding the GetPrimaryViewControllerForCollapsingSplitViewController method of the UISplitViewControllerDelegate and providing any View Controller that they want to display in the collapsed state.
  • 보조 뷰 컨트롤러는 주 보기 컨트롤러에 병합 해야 합니다.The Secondary View Controller has to get merged into the Primary View Controller. 일반적으로 개발자는이 단계에 대 한 어떤 조치도 취할 필요가 없습니다. 분할 뷰 컨트롤러는 하드웨어 장치에 따라이 단계의 자동 처리를 포함 합니다.Generally the developer will not need to take any action for this step; the Split View Controller includes automatic handling of this phase based on the hardware device. 그러나 여기서 개발자는이 변경와 상호 작용 하려면 특별 한 경우도 있을 수 있습니다.However, there may be some special cases where the developer will want to interact with this change. 호출을 CollapseSecondViewController 메서드는 UISplitViewControllerDelegate 마스터 뷰 컨트롤러는 축소 경우 세부 정보 보기 대신 표시할 수 있습니다.Calling the CollapseSecondViewController method of the UISplitViewControllerDelegate allows the master view controller to be displayed when the collapse occurs, instead of the details view.

분할 뷰 컨트롤러를 확장합니다.Expanding the Split View Controller

이제 보겠습니다 살펴보겠습니다 자세히 어떤 분할 뷰 컨트롤러는 축소 된 상태에서 확장 되 면 발생 합니다.Now let's take a closer look at what happens when a Split View Controller is expanded from a collapsed state. 이번에 발생 해야 하는 두 단계가 있습니다.Once again, there are two stages that need to occur:

  • 먼저, 새 기본 뷰 컨트롤러를 정의 합니다.First, define the new Primary View Controller. 분할 뷰 컨트롤러는 기본적으로 축소 된 보기에서 기본 뷰 컨트롤러를 자동으로 사용 됩니다.By default, the Split View Controller will automatically use the Primary View Controller from the collapsed view. 다시 사용 하 여이 동작 개발자를 재정의할 수는 GetPrimaryViewControllerForExpandingSplitViewController 메서드는 UISplitViewControllerDelegate 합니다.Again, the developer can override this behavior using the GetPrimaryViewControllerForExpandingSplitViewController method of the UISplitViewControllerDelegate .
  • 기본 뷰 컨트롤러를 선택한 후 보조 뷰 컨트롤러를 만들어야 합니다.Once the Primary View Controller has been chosen, the Secondary View Controller must be recreated. 다시 분할 뷰 컨트롤러는 하드웨어 장치에 따라이 단계의 자동 처리를 포함 합니다.Again, the Split View Controller includes automatic handling of this phase based on the hardware device. 개발자를 호출 하 여이 동작을 재정의할 수는 SeparateSecondaryViewController 메서드는 UISplitViewControllerDelegate 합니다.The developer can override this behavior by calling the SeparateSecondaryViewController method of the UISplitViewControllerDelegate .

분할 보기 컨트롤러에 있는 기본 뷰 컨트롤러 역할에서 모두 확장을 구현 하 여 보기의 축소를 CollapseSecondViewController 하 고 SeparateSecondaryViewController 의 메서드는 UISplitViewControllerDelegate.In a Split View Controller, the Primary View Controller plays a part in both the expanding and collapsing of the views by implementing the CollapseSecondViewController and SeparateSecondaryViewController methods of the UISplitViewControllerDelegate. UINavigationController 이러한 메서드를 자동으로 푸시 및 팝 보조 뷰 컨트롤러를 구현 합니다.UINavigationController implements these methods to automatically push and pop the Secondary View controller.

표시 뷰 컨트롤러Showing View Controllers

Apple iOS 8 만든 또 다른 변화는 개발자 뷰 컨트롤러를 표시 하는 방법입니다.Another change that Apple has made to iOS 8 is in the way that the developer shows View Controllers. 응용 프로그램 (예: 테이블 뷰 컨트롤러)를 리프 뷰 컨트롤러 있어 개발자에 설명 했습니다 (예를 들어,에 대 한 응답으로 셀에 사용자 탭), 다른 컨트롤러는 계층을 통해 다시 응용 프로그램에 도달 하는 경우 이전에는 탐색 뷰 컨트롤러 및 호출 된 PushViewController 에 대해 새 뷰를 표시 하는 메서드.In the past, if the application had a Leaf View Controller (such as a Table View Controller), and the developer showed a different one (for example, in response to the user tapping on a cell), the application would reach back through the controller hierarchy to the Navigation View Controller and call the PushViewController method against it to display the new view.

이 탐색 컨트롤러에서 실행 되는 환경 사이의 매우 밀접 한 결합을 제공 합니다.This presented a very tight coupling between the Navigation Controller and the environment that it was running in. Ios 8에서 Apple에 분리 된이 두 개의 새 메서드를 제공 하 여:In iOS 8, Apple has decoupled this by providing two new methods:

  • ShowViewController – 해당 환경에 따라 새 뷰 컨트롤러를 표시 하도록 조정 합니다.ShowViewController – Adapts to display the new view controller based on its environment. 예를 들어, 한 UINavigationController 스택에 새 뷰를 푸시 하면 됩니다.For example, in a UINavigationController it simply pushes the new view onto the stack. 분할 뷰 컨트롤러에서 새 기본 뷰 컨트롤러로 새 뷰 컨트롤러 왼쪽에 표시 됩니다.In a Split View Controller, the new View Controller will be presented on the left side as the new Primary View Controller. 컨테이너 보기 컨트롤러 없음가 있는 경우 모달 뷰 컨트롤러로 새 뷰가 표시 됩니다.If no container view controller is present, the new view will be displayed as a Modal View Controller.
  • ShowDetailViewController – 유사한 방식으로 작동 합니다. ShowViewController, 전달 되는 새 뷰 컨트롤러를 사용 하 여 세부 정보 보기를 바꾸려면 분할 뷰 컨트롤러에서 구현 됩니다.ShowDetailViewController – Works in a similar fashion to ShowViewController, but is implemented on a Split View Controller to replace the details view with the new View Controller being passed in. 분할 뷰 컨트롤러 (iPhone 응용 프로그램에서에서 볼 수)으로 축소 되어 있으면 호출 리디렉션됩니다는 ShowViewController 메서드와 새 보기를 기본 뷰 컨트롤러로 표시 됩니다.If the Split View Controller is collapsed (as might be seen in an iPhone Application), the call will be redirected to the ShowViewController method, and the new view will be shown as the Primary View Controller. 다시 컨테이너 보기 컨트롤러 없음가 있는 경우 모달 뷰 컨트롤러로 새 뷰가 표시 됩니다.Again, if no container view controller is present, the new view will be displayed as a Modal View Controller.

이러한 메서드는 리프 뷰 컨트롤러를 시작 하 여 작동 하 고 새 보기의 표시를 처리 하도록 오른쪽 컨테이너 뷰 컨트롤러를 찾을 때까지 뷰 계층 구조를 탐색 합니다.These methods work by starting at the Leaf View Controller and walk up the view hierarchy until they find the right container view controller to handle the display of the new view.

개발자 구현할 수 있습니다 ShowViewController 하 고 ShowDetailViewController 기능을 자동화 된 동일한 가져오기에 고유한 사용자 지정 뷰 컨트롤러에는 UINavigationControllerUISplitViewController 제공.Developers can implement ShowViewController and ShowDetailViewController in their own custom View Controllers to get the same automated functionality that UINavigationController and UISplitViewController provides.

작동 방법How it works

이 섹션은 iOS 8에서에서 실제로 구현 하는 이러한 메서드는 방법을 살펴보겠습니다를 걸립니다 했습니다.In this section we will take a look at how these methods are actually implemented in iOS 8. 첫 번째 살펴보겠습니다 새 GetTargetForAction 메서드:First let’s look at the new GetTargetForAction method:

이 메서드는 올바른 컨테이너가 뷰 컨트롤러를 찾을 때까지 계층 구조 체인을 설명 합니다.This method walks the hierarchy chain until the correct container view controller is found. 예를 들어:For example:

  1. 경우는 ShowViewController 메서드가 호출 되 면이 메서드를 구현 하는 체인에서 첫 번째 뷰 컨트롤러 이므로 탐색 컨트롤러에 새 보기의 부모로 사용 됩니다.If a ShowViewController method is called, the first View Controller in the chain that implements this method is the Navigation Controller, so it is used as the parent of the new view.
  2. 경우는 ShowDetailViewController 메서드가 대신 호출 된, 분할 뷰 컨트롤러는 첫 번째 뷰 컨트롤러를 부모로 사용할 구현입니다.If a ShowDetailViewController method was called instead, the Split View Controller is the first View Controller to implement it, so it is used as the parent.

GetTargetForAction 방법은 지정된 된 동작을 구현 하는 뷰 컨트롤러를 찾아 다음 요청에서 해당 뷰 컨트롤러가 해당 동작을 수신 하려는 경우.The GetTargetForAction method works by locating a View Controller that implements a given Action and then asking that View Controller if it wants to receive that action. 이 메서드는 공용 이므로 개발자 함수에서와 마찬가지로 기본 제공 되는 자체 사용자 지정 메서드를 만들 수 있습니다 ShowViewControllerShowDetailViewController 메서드.Since this method is public, developers can create their own custom methods that function just like the built in ShowViewController and ShowDetailViewController methods.

적응 프레젠테이션Adaptive Presentation

Ios 8에서 Apple 팝 오버 프레젠테이션을 했습니다 ( UIPopoverPresentationController) 적응도 합니다.In iOS 8, Apple has made Popover Presentations ( UIPopoverPresentationController) adaptive as well. 팝 오버 프레젠테이션 뷰 컨트롤러 일반 크기 클래스에서 자동으로 일반 팝 오버 보기로 표시 하지만 전체 화면에에서 표시를 가로로 압축 크기 클래스 (같은 iPhone에서).So a Popover Presentation View Controller will automatically present a normal Popover View in a Regular Size Class, but will display it full screen in a horizontally compact Size Class (such as on an iPhone).

통합된 스토리 보드 시스템 내에서 변경 내용에 맞게, 새 컨트롤러 개체를 만든 표시 뷰 컨트롤러를 관리 하려면- UIPresentationController합니다.To accommodate the changes within the unified storyboard system, a new controller object has been created to manage the presented View Controllers — UIPresentationController. 이 컨트롤러는 뷰 컨트롤러가 해제 될 때까지 표시 되는 시간에서 생성 됩니다.This controller is created from the time the View Controller is presented until it is dismissed. 관리 클래스 이므로 간주할 수 슈퍼 클래스 뷰 컨트롤러를 통해 프레젠테이션 컨트롤러 제어를 공급 되돌려 뷰 컨트롤러는 뷰 컨트롤러 (예: 방향)에 영향을 주는 장치 변경에 응답할 때.As it is a managing class, it can be considered a super class over the View Controller as it responds to device changes that affect the View Controller (such as orientation) which are then fed back into the View Controller the Presentation Controller controls.

개발자는 뷰 컨트롤러를 사용 하 여 표시 되 면 합니다 PresentViewController 메서드를 프레젠테이션 프로세스의 관리에 전달 됩니다 UIKit합니다.When the developer presents a View Controller using the PresentViewController method, the management of the presentation process is handed to UIKit. 뷰 컨트롤러에로 스타일이 되는 경우만 예외로, 생성 되는 스타일에 대 한 올바른 컨트롤러 (무엇) UIKit 처리 UIModalPresentationCustom합니다.UIKit handles (among other things) the correct controller for the style being created, with the only exception being when a View Controller has the style set to UIModalPresentationCustom. 여기에서 응용 프로그램 고유의 PresentationController 사용 하지 않고는 제공할 수는 UIKit 컨트롤러입니다.Here, the application can provide it’s own PresentationController rather than using the UIKit controller.

사용자 지정 프레젠테이션 스타일Custom Presentation Styles

사용자 지정 프레젠테이션 스타일을 사용 하 여 개발자는 사용할 사용자 지정 프레젠테이션 컨트롤러를 사용 합니다.With a custom presentation style, developers have the option to use a custom Presentation Controller. 모양 및 동작을 동맹는 뷰를 수정 하려면 사용자 지정이 컨트롤러를 사용할 수 있습니다.This custom controller can be used to modify the appearance and behavior of the View it is allied to.

Size 클래스 사용Working with Size Classes

이 문서에 포함 되어 있는 적응 사진 Xamarin 프로젝트 크기 클래스 및 적응 뷰 컨트롤러를 사용 하 여 iOS 8 통합 인터페이스 응용 프로그램의 작업 예제를 제공 합니다.The Adaptive Photos Xamarin Project that is included with this article gives a working example of using Size Classes and Adaptive View Controllers in an iOS 8 Unified Interface application.

응용 프로그램 만들고 동안 UI 완전히 IOS 디자이너를 사용 하 여 아닌 코드에서 만든 통합 스토리 보드를 동일한 기술을 적용 합니다.While the application creates its UI completely from code, as opposed to using the IOS Designer and creating a Unified Storyboard, the same techniques apply. 이 문서의 뒷부분에 통합 스토리 보드 및 iOS 디자이너는 Xamarin 응용 프로그램에서 사용 하 여 Size 클래스를 사용 하는 방법을 살펴보겠습니다.Later in this article, we’ll show how to use Size Classes with a Unified Storyboard and the iOS Designer in a Xamarin Application.

이제 어떻게 적응 사진 프로젝트는 일부의 크기 클래스 기능에서에서 구현 iOS 8 적응 응용 프로그램을 만드는 좀 더 자세히 살펴보겠습니다.Now let’s take a closer look at how the Adaptive Photos project is implementing several of the Size Class features in iOS 8 to create a Adaptive Application.

특성 (trait) 환경 변경 사항에 맞게 조정Adapting to Trait Environment Changes

사용자가 세로에서 가로로 장치를 회전할 때 iPhone에서 적응 사진 응용 프로그램을 실행, 분할 뷰 컨트롤러의 마스터 및 세부 정보 보기를 표시 합니다.When running the Adaptive Photos application on an iPhone, when the user rotates the device from portrait to landscape, the Split View Controller will display both the master and details view:

재정의 하 여 이렇게 합니다 UpdateConstraintsForTraitCollection 의 값을 기반으로 하는 뷰 컨트롤러 및 제약 조건을 조정 메서드를 VerticalSizeClass입니다.This is accomplished by overriding the UpdateConstraintsForTraitCollection method of the View Controller and adjusting the constraints based on the value of the VerticalSizeClass. 예를 들어:For example:

public void UpdateConstraintsForTraitCollection (UITraitCollection collection)
{
    var views = NSDictionary.FromObjectsAndKeys (
        new object[] { TopLayoutGuide, ImageView, NameLabel, ConversationsLabel, PhotosLabel },
        new object[] { "topLayoutGuide", "imageView", "nameLabel", "conversationsLabel", "photosLabel" }
    );

    var newConstraints = new List<NSLayoutConstraint> ();
    if (collection.VerticalSizeClass == UIUserInterfaceSizeClass.Compact) {
        newConstraints.AddRange (NSLayoutConstraint.FromVisualFormat ("|[imageView]-[nameLabel]-|",
            NSLayoutFormatOptions.DirectionLeadingToTrailing, null, views));

        newConstraints.AddRange (NSLayoutConstraint.FromVisualFormat ("[imageView]-[conversationsLabel]-|",
            NSLayoutFormatOptions.DirectionLeadingToTrailing, null, views));

        newConstraints.AddRange (NSLayoutConstraint.FromVisualFormat ("[imageView]-[photosLabel]-|",
            NSLayoutFormatOptions.DirectionLeadingToTrailing, null, views));

        newConstraints.AddRange (NSLayoutConstraint.FromVisualFormat ("V:|[topLayoutGuide]-[nameLabel]-[conversationsLabel]-[photosLabel]",
            NSLayoutFormatOptions.DirectionLeadingToTrailing, null, views));

        newConstraints.AddRange (NSLayoutConstraint.FromVisualFormat ("V:|[topLayoutGuide][imageView]|",
            NSLayoutFormatOptions.DirectionLeadingToTrailing, null, views));

        newConstraints.Add (NSLayoutConstraint.Create (ImageView, NSLayoutAttribute.Width, NSLayoutRelation.Equal,
            View, NSLayoutAttribute.Width, 0.5f, 0.0f));
    } else {
        newConstraints.AddRange (NSLayoutConstraint.FromVisualFormat ("|[imageView]|",
            NSLayoutFormatOptions.DirectionLeadingToTrailing, null, views));

        newConstraints.AddRange (NSLayoutConstraint.FromVisualFormat ("|-[nameLabel]-|",
            NSLayoutFormatOptions.DirectionLeadingToTrailing, null, views));

        newConstraints.AddRange (NSLayoutConstraint.FromVisualFormat ("|-[conversationsLabel]-|",
            NSLayoutFormatOptions.DirectionLeadingToTrailing, null, views));

        newConstraints.AddRange (NSLayoutConstraint.FromVisualFormat ("|-[photosLabel]-|",
            NSLayoutFormatOptions.DirectionLeadingToTrailing, null, views));

        newConstraints.AddRange (NSLayoutConstraint.FromVisualFormat ("V:[topLayoutGuide]-[nameLabel]-[conversationsLabel]-[photosLabel]-20-[imageView]|",
            NSLayoutFormatOptions.DirectionLeadingToTrailing, null, views));
    }

    if (constraints != null)
        View.RemoveConstraints (constraints.ToArray ());

    constraints = newConstraints;
    View.AddConstraints (constraints.ToArray ());
}

전환 애니메이션 추가Adding Transition Animations

애니메이션 응용 프로그램에서 이동 적응 사진에서 분할 뷰 컨트롤러 축소를 확장 하면 재정의 하 여 기본 애니메이션에 추가 됩니다는 WillTransitionToTraitCollection 뷰 컨트롤러의 메서드.When the Split View Controller in the Adaptive Photos application goes from collapsed to expanded, animations are added to the default animations by overriding the WillTransitionToTraitCollection method of the view controller. 예를 들어:For example:

public override void WillTransitionToTraitCollection (UITraitCollection traitCollection, IUIViewControllerTransitionCoordinator coordinator)
{
    base.WillTransitionToTraitCollection (traitCollection, coordinator);
    coordinator.AnimateAlongsideTransition ((UIViewControllerTransitionCoordinatorContext) => {
        UpdateConstraintsForTraitCollection (traitCollection);
        View.SetNeedsLayout ();
    }, (UIViewControllerTransitionCoordinatorContext) => {
    });
}

재정의 특성 (trait) 환경Overriding the Trait Environment

위에 표시 된 것과 같이 적응 사진 응용 프로그램에서 강제로 마스터 뷰와 분할 뷰 컨트롤러의 세부 정보를 모두 표시할 가로 보기로 iPhone 장치는 경우.As show above, the Adaptive Photos application forces the Split View Controller to display both the details and the master views when the iPhone device is in the landscape view.

이 뷰 컨트롤러에서 다음 코드를 사용 하 여 수행 되었습니다.This was accomplished by using the following code in the View Controller:

private UITraitCollection forcedTraitCollection = new UITraitCollection ();
...

public UITraitCollection ForcedTraitCollection {
    get {
        return forcedTraitCollection;
    }

    set {
        if (value != forcedTraitCollection) {
            forcedTraitCollection = value;
            UpdateForcedTraitCollection ();
        }
    }
}
...

public override void ViewWillTransitionToSize (SizeF toSize, IUIViewControllerTransitionCoordinator coordinator)
{
    ForcedTraitCollection = toSize.Width > 320.0f ?
         UITraitCollection.FromHorizontalSizeClass (UIUserInterfaceSizeClass.Regular) :
         new UITraitCollection ();

    base.ViewWillTransitionToSize (toSize, coordinator);
}

public void UpdateForcedTraitCollection ()
{
    SetOverrideTraitCollection (forcedTraitCollection, viewController);
}

확장 및 분할 뷰 컨트롤러를 축소 합니다.Expanding and Collapsing the Split View Controller

다음 Xamarin에서 분할 뷰 컨트롤러의 확장 및 축소 동작을를 구현 하는 방법을 살펴보겠습니다.Next let’s examine how the expanding and collapsing behavior of the Split View Controller was implemented in Xamarin. AppDelegate분할 뷰 컨트롤러를 만들면, 이러한 변경 내용을 처리에 해당 대리자를 할당 합니다.In the AppDelegate, when the Split View Controller is created, its delegate is assigned to handle these changes:

public class SplitViewControllerDelegate : UISplitViewControllerDelegate
{
    public override bool CollapseSecondViewController (UISplitViewController splitViewController,
        UIViewController secondaryViewController, UIViewController primaryViewController)
    {
        AAPLPhoto photo = ((CustomViewController)secondaryViewController).Aapl_containedPhoto (null);
        if (photo == null) {
            return true;
        }

        if (primaryViewController.GetType () == typeof(CustomNavigationController)) {
            var viewControllers = new List<UIViewController> ();
            foreach (var controller in ((UINavigationController)primaryViewController).ViewControllers) {
                var type = controller.GetType ();
                MethodInfo method = type.GetMethod ("Aapl_containsPhoto");

                if ((bool)method.Invoke (controller, new object[] { null })) {
                    viewControllers.Add (controller);
                }
            }

            ((UINavigationController)primaryViewController).ViewControllers = viewControllers.ToArray<UIViewController> ();
        }

        return false;
    }

    public override UIViewController SeparateSecondaryViewController (UISplitViewController splitViewController,
        UIViewController primaryViewController)
    {
        if (primaryViewController.GetType () == typeof(CustomNavigationController)) {
            foreach (var controller in ((CustomNavigationController)primaryViewController).ViewControllers) {
                var type = controller.GetType ();
                MethodInfo method = type.GetMethod ("Aapl_containedPhoto");

                if (method.Invoke (controller, new object[] { null }) != null) {
                    return null;
                }
            }
        }

        return new AAPLEmptyViewController ();
    }
}

SeparateSecondaryViewController 사진을 표시 되 고 해당 상태를 기반으로 하는 작업을 수행 하려면 메서드를 테스트 합니다.The SeparateSecondaryViewController method tests to see if a photo is being displayed and takes action based on that state. 사진이 추가 되지 않고 있으면 마스터 뷰 컨트롤러 표시 되도록 보조 뷰 컨트롤러를 축소 해당 표시 합니다.If no photo is being shown it collapses the Secondary View Controller so that the Master View Controller is displayed.

CollapseSecondViewController 메서드를 사용 하는 분할 뷰 컨트롤러를 확장 하는 경우 해당 보기로 다시 축소 하므로 모든 사진이 스택의에 존재 하는지 확인 합니다.The CollapseSecondViewController method is used when expanding the Split View Controller to see if any photos exist on the stack, if so it collapses back to that view.

뷰 컨트롤러 간에 이동Moving Between View Controllers

다음으로 적응 사진 응용 프로그램 뷰 컨트롤러 간에 이동 하는 방법에 대해 살펴보겠습니다.Next, let’s take a look at how the Adaptive Photos application moves between view controllers. AAPLConversationViewController 테이블에서 셀을 선택 하면 클래스는 ShowDetailViewController 메서드를 호출 하는 세부 정보 표시:In the AAPLConversationViewController class when the user selects a cell from the table, the ShowDetailViewController method is called to display the details view:

public override void RowSelected (UITableView tableView, NSIndexPath indexPath)
{
    var photo = PhotoForIndexPath (indexPath);
    var controller = new AAPLPhotoViewController ();
    controller.Photo = photo;

    int photoNumber = indexPath.Row + 1;
    int photoCount = (int)Conversation.Photos.Count;
    controller.Title = string.Format ("{0} of {1}", photoNumber, photoCount);
    ShowDetailViewController (controller, this);
}

공개 표시기를 표시합니다.Displaying Disclosure Indicators

적응 사진 응용 프로그램에서 몇 가지 면 공개 표시기는 숨겨지거나 특성 (trait) 환경에 변경 내용을 기준으로 표시 하는 위치입니다.In the Adaptive Photo application there are several places where Disclosure Indicators are hidden or shown based on changes to the Trait Environment. 이 다음 코드를 사용 하 여 처리 됩니다.This is handled with the following code:

public bool Aapl_willShowingViewControllerPushWithSender ()
{
    var selector = new Selector ("Aapl_willShowingViewControllerPushWithSender");
    var target = this.GetTargetViewControllerForAction (selector, this);

    if (target != null) {
        var type = target.GetType ();
        MethodInfo method = type.GetMethod ("Aapl_willShowingDetailViewControllerPushWithSender");
        return (bool)method.Invoke (target, new object[] { });
    } else {
        return false;
    }
}

public bool Aapl_willShowingDetailViewControllerPushWithSender ()
{
    var selector = new Selector ("Aapl_willShowingDetailViewControllerPushWithSender");
    var target = this.GetTargetViewControllerForAction (selector, this);

    if (target != null) {
        var type = target.GetType ();
        MethodInfo method = type.GetMethod ("Aapl_willShowingDetailViewControllerPushWithSender");
        return (bool)method.Invoke (target, new object[] { });
    } else {
        return false;
    }
}

이러한 메서드를 사용 하 여 구현 됩니다는 GetTargetViewControllerForAction 메서드 위의 자세히 설명 합니다.These are implemented using the GetTargetViewControllerForAction method discussed in detail above.

테이블 뷰 컨트롤러는 데이터를 표시할 때 푸시 했을 것 여부 및 표시 하거나 적절 하 게 공개 표시기를 숨길 것인지 여부를 확인 하려면 위의 구현 하는 메서드를 사용 합니다.When a Table View Controller is displaying data, it uses the methods implemented above to see whether or not a push is going to happen, and whether or not to display or hide the Disclosure Indicator accordingly:

public override void WillDisplay (UITableView tableView, UITableViewCell cell, NSIndexPath indexPath)
{
    bool pushes = ShouldShowConversationViewForIndexPath (indexPath) ?
         Aapl_willShowingViewControllerPushWithSender () :
         Aapl_willShowingDetailViewControllerPushWithSender ();

    cell.Accessory = pushes ? UITableViewCellAccessory.DisclosureIndicator : UITableViewCellAccessory.None;
    var conversation = ConversationForIndexPath (indexPath);
    cell.TextLabel.Text = conversation.Name;
}

ShowDetailTargetDidChangeNotification 형식New ShowDetailTargetDidChangeNotification Type

Size 클래스 및 분할 뷰 컨트롤러 내에서 특성 (trait) 환경을 사용 하기 위한 Apple이 새 알림 형식을 추가 ShowDetailTargetDidChangeNotification합니다.Apple has added a new notification type for working with Size Classes and Trait Environments from within a Split View Controller, ShowDetailTargetDidChangeNotification. 대상 분할 뷰 컨트롤러에 대 한 세부 정보 보기 컨트롤러를 확장 하거나 축소 하는 등 변경 될 때마다이 알림을 전송 합니다.This notification gets sent whenever the target Detail View for a Split View Controller changes, such as when the controller expands or collapses.

적응 사진 응용 프로그램 세부 정보 뷰 컨트롤러 변경 될 때 공개 표시기의 상태를 업데이트 하려면이 알림을 사용 하 여:The Adaptive Photos application uses this notification to update the state of the Disclosure Indicator when the Detail View Controller changes:

public override void ViewDidLoad ()
{
    base.ViewDidLoad ();
    TableView.RegisterClassForCellReuse (typeof(UITableViewCell), AAPLListTableViewControllerCellIdentifier);
    NSNotificationCenter.DefaultCenter.AddObserver (this, new Selector ("showDetailTargetDidChange:"),
        UIViewController.ShowDetailTargetDidChangeNotification, null);
    ClearsSelectionOnViewWillAppear = false;
}

Size 클래스는 모든 방법을 보려면 적응 사진 응용 프로그램에 자세히 살펴보겠습니다, 그리고 특성 (trait) 컬렉션과 적응 뷰 컨트롤러를 Xamarin.iOS에서 통합 된 응용 프로그램을 만드는 쉽게 사용할 수 있습니다.Take a closer look at the Adaptive Photos application to see all of the ways that Size Classes, Trait Collections and Adaptive View Controllers can be used to easily create a Unified Application in Xamarin.iOS.

통합 StoryboardsUnified Storyboards

새 통합 스토리 보드 하면 개발자가 만든 스토리 보드 파일 여러 Size 클래스를 대상으로 하 여 iPhone 및 iPad 장치에 표시 될 수 있는 ios 8, 통합 합니다.New to iOS 8, Unified Storyboards allow the developer to create one, unified storyboard file that can be displayed on both iPhone and iPad devices by targeting multiple Size Classes. 통합 스토리 보드를 사용 하 여 개발자는 UI 특정 코드 쓰고 하나만 인터페이스 디자인을 만들고 유지 관리 합니다.By using Unified Storyboards, the developer writes less UI specific code and has only one interface design to create and maintain.

통합 스토리 보드의 주요 이점은 다음과 같습니다.The key benefits of Unified Storyboards are:

  • IPhone 및 iPad에 대 한 동일한 스토리 보드 파일을 사용 합니다.Use the same storyboard file for iPhone and iPad.
  • IOS 6 및 iOS 7 이전 버전과를 배포 합니다.Deploy backwards to iOS 6 and iOS 7.
  • 다양 한 장치, 방향 및 Xamarin iOS 디자이너 내에서 모든 OS 버전에 대 한 레이아웃을 미리 봅니다.Preview the layout for different devices, orientations and OS versions all from within the Xamarin iOS Designer.

이 기능은 완벽 하 게 Mac 용 Visual Studio에서 지원 됩니다.This feature is fully supported in Visual Studio for Mac

Size 클래스를 사용 하도록 설정Enabling Size Classes

기본적으로 모든 새 Xamarin.iOS 프로젝트는 크기 클래스입니다.By default, any new Xamarin.iOS project will us size classes. Size 클래스 및 적응 Segue는 이전 프로젝트에서 스토리 보드 내을 사용 하려면 먼저 변환 해야 iOS 디자이너 내에서 Xcode 6 통합 스토리 보드 형식입니다.To use Size Classes and Adaptive Segues inside a storyboard from an older project, it must first be converted to the Xcode 6 Unified Storyboard format from inside the iOS Designer.

IOS 디자이너 및 검사에에서 변환할 스토리 보드를 열이 작업을 수행 하는 Size 클래스를 사용 하 여 확인란:To do this open the Storyboard to be converted in the iOS Designer and check the Use Size Classes check box:

IOS 디자이너는 개발자가 Size 클래스를 사용 하는 스토리 보드의 형식을 변환 하는 확인 합니다.The iOS Designer will confirm that the developer wants to convert the format of the storyboard to use Size Classes:

중요

제대로 작동 하려면 Size 클래스에 대 한 자동 레이아웃을 확인 해야 합니다.Auto Layout must also be checked for Size Classes to work correctly.

일반 장치 유형Generic Device Types

Size 클래스를 사용 하는 스토리 보드 변환 되 면이 다시 표시 될 디자인 화면에서 및 다른 이름으로 뷰 장치 제네릭 됩니다.Once the storyboard has been converted to use Size Classes, it will be redisplayed in the Design Surface and the View As device will be Generic:

일반 장치 종류를 선택 하는 경우 모든 뷰 컨트롤러 600 x 600 사각형으로 크기가 조정 됩니다.When the Generic device type is selected, all View Controllers will be resized to a 600 x 600 Square. 이 사각형 어떤 너비 및 높이 모든 크기를 나타냅니다.This square represents sizes of any width and any height. IOS 디자이너이 모드에 있으면이 편집 내용은 모든 크기 클래스에 적용 됩니다.When the iOS Designer is in this mode, any edits will apply to all of the Size Classes.

개발자는 iPhone로 디자인 화면을 표시 하는 옵션도 있습니다.The developer also has the option of viewing the design surface as an iPhone:

또는 iPad로 보기:Or viewing it as an iPad:

Size 클래스를 선택 합니다.Select a Size Class

(다른 이름으로 뷰 드롭다운) 가까운 디자인 화면의 왼쪽 위 모퉁이에 크기 클래스 선택기 단추를 사용 하는 경우The Size Class Selector button is at the upper left hand corner of the Design Surface (near the View As dropdown). 개발자를 Size 클래스 현재 편집 중인 선택 하 수 있습니다.It allows the developer to select which Size Classes are currently being edited:

선택기 크기 클래스 선택 3x3 표로 표시합니다.The selector presents the Size Class selection as a 3 x 3 grid. 각 그리드에서 사각형의 너비 클래스와 높이의 조합을 나타냅니다.Each of the squares in the grid represents a combination of a Width Class and a Height Class. 가운데 사각형 Any Width/Any 높이 크기 클래스 (즉, 통합 스토리 보드에 대 한 기본 뷰)를 선택 합니다.The center square selects the Any Width/Any Height Size class (which is the default view for a Unified Storyboard). 이 사각형을 선택 하면 개발자가 다른 모든 구성에 의해 상속 된 기본 레이아웃으로 편집 합니다.When this square is selected, the developer is editing the default layout, which is inherited by all the other configurations.

그리드의 왼쪽 위 모퉁이에 있는 정사각형 Compact Compact 너비/높이 Size 클래스를 나타냅니다.The square in the upper left hand corner of the grid represents the Compact Width/Compact Height Size Class:

이 모드는 가로 방향의 iPhone에 해당합니다.This mode corresponds to an iPhone in the landscape orientation. 그리드의 오른쪽 위 모서리에 있는 사각형 일반 일반 너비/높이 크기 클래스 iPad를 나타내는 나타냅니다.The square in the lower right hand corner of the grid represents the Regular Width/Regular Height Size Class, which represents an iPad:

세로 방향의 iPhone에 대 한 레이아웃을 편집 하려면 왼쪽 아래 모서리에 있는 사각형을 선택 합니다.To edit the layout for an iPhone in the portrait orientation, select the square in the lower left hand corner. 이 Compact 일반 너비/높이 크기 클래스를 나타냅니다.This represents the Compact Width/Regular Height Size Class:

선택 하려면 사각형을 클릭 하 고 디자인 화면에는 새 선택 영역에 맞게 뷰 컨트롤러의 크기 변경 됩니다.Click in the square to select it and the Design Surface will change the size of the View Controllers to match the new selection:

Size 클래스 및 Iphone 및 Ipad에 대 한 레이아웃에 미치는 영향에 자세한 내용은이 문서의 크기 클래스 섹션을 참조 하세요.See the Size Class section of this article for more information on Size Classes and how they affect layout for iPhones and iPads.

적응 Segue 형식Adaptive Segue Types

개발자가 이전에 스토리 보드를 사용 하는 경우 기존 segue 유형의 익숙할 푸시모달 하 고 팝 오버합니다.If the developer has used storyboards before, then they will be familiar with the existing segue types of Push, Modal and Popover. Size 클래스 통합 스토리 보드 파일을 사용 하는 경우 다음 적응 Segue 형식 (위에서 설명한 새로운 뷰 컨트롤러 API 해당 함)이 제공 됩니다. 표시 하 고 세부 정보 표시합니다.When Size Classes are enabled on a Unified Storyboard file, the following Adaptive Segue Types (that correspond to the new View Controller API discussed above) are made available: Show and Show Detail.

중요

Size 클래스를 사용할 경우에 segue 기존 새 형식으로 변환 합니다.When Size Classes are enabled, any existing segues will be converted to the new types.

IOS 예로 들어 Masterview 간단한 게임 탐색 메뉴에 있는 분할 뷰 컨트롤러를 사용 하 여 통합 스토리 보드를 사용 하는 8 응용 프로그램을 보겠습니다.Take the example of an iOS 8 Application that uses a Unified Storyboard with a Split View Controller that has a simple game navigation menu in the Master View. 사용자가 메뉴 단추를 클릭 하면 선택한 항목의 뷰 컨트롤러 iPad에서 실행 하는 경우 분할 뷰 컨트롤러의 세부 정보 섹션에 표시 해야 합니다.If the user clicks on a menu button, the selected item’s View Controller should be shown in the Details section of the Split View Controller when running on an iPad. IPhone에서 항목의 뷰 컨트롤러를 탐색 스택으로 푸시할 수 해야 합니다.On an iPhone the item’s View Controller should be pushed onto the Navigation stack.

이 위해서는 iOS 디자이너에서에서 컨트롤-단추를 클릭을 선을 표시할 보기 컨트롤러를 끕니다.To achieve this effect, in the iOS Designer control-click on the button and drag a line to the View Controller to be displayed. 마우스 단추를 놓으면 선택 Show Detail Segue 형식 팝업 메뉴에서:When the mouse button is released, select Show Detail from the Segue Type Popup menu:

새 segue 단추와 뷰 컨트롤러 간에 만들어질 수 있습니다.The new segue will be created between the button and the View Controller. 이제 iPhone 시뮬레이터에서에서 응용 프로그램을 실행 하 고 주 메뉴가 표시 됩니다.Now run the application in the iPhone Simulator and the Main Menu will be displayed:

클릭 합니다 게임 선택 단추와 해당 항목의 뷰 컨트롤러를 탐색 스택으로 푸시되는:Click on the Select Game button and the item’s View Controller will be pushed onto the Navigation Stack:

IPhone 시뮬레이터를 중지 하 고 iPad 시뮬레이터에서에서 응용 프로그램을 실행 합니다.Stop the iPhone Simulator and run the Application in the iPad Simulator. 가로 방향 및 기본 전환 메뉴 다시 표시 됩니다.Switch to the landscape orientation and the main menu is again displayed:

다시 클릭 합니다 게임 선택 단추 및 항목의 뷰 컨트롤러 분할 뷰 컨트롤러의 세부 정보 섹션에 표시 됩니다.Again, click on the Select Game button and the item’s View Controller is shown in the Details section of the Split View Controller:

Size 클래스에서 요소 제외Excluding an Element from a Size Class

지정된 된 요소 (예: 뷰, 컨트롤 또는 제약 조건) 특정 크기 클래스 내에서 필요 없는 경우 경우가 있습니다.There are times when a given element (such as a View, Control or a Constraint) is not required inside of a specific Size Class. 크기 클래스에서 요소를 제외 하려면에서 제외할 원하는 항목을 선택 합니다 디자인 화면합니다.To exclude an element from a Size Class, select the desired item to exclude in the Design Surface. 아래쪽으로 스크롤하여를 속성 탐색기 을 클릭 합니다 기어 드롭다운 메뉴.Scroll to the bottom of the Property Explorer and click the Gear Dropdown menu. 조합을 선택 너비 하 고 높이 에서 항목을 제외 하려면:Select the combination of Width and Height to exclude the item from:

제외 대/소문자 아래쪽의 요소에 추가 됩니다 합니다 속성 탐색기합니다.A new Exclusion Case will be added to the element in the bottom of the Property Explorer. 다음으로, 선택 취소 합니다 설치 됨 지정된 된 크기 클래스에 대 한 확인란을 선택:Next, uncheck the Installed checkbox for the given Size Class:

너비와 높이 항목에서 제외 된 디자인 화면을 전환할 지정된 된 크기 클래스 전체 UI 디자인에서 제거 되었습니다.Switch the Design Surface to the Width and Height that the item was excluded from, it has been removed from the given Size Class, but not the entire UI design:

에 Any Width/Any 높이 크기 클래스와 요소를 다시 전환 합니다.Switching back to the Any Width/Any Height size class and the element is still in place:

IPad 시뮬레이터에서에서 응용 프로그램이 실행 되 면 요소가 표시 됩니다.When the application is run in the iPad Simulator, the element appears:

및 요소는 누락 된 응용 프로그램은 iPhone 시뮬레이터에서 실행 하는 경우:And when the application is run on the iPhone Simulator, the element is missing:

요소에서 제외 사례를 제거할 요소를 선택 하면 됩니다는 디자인 화면의 아래쪽으로 스크롤하여를 속성 탐색기 클릭 합니다 - 제거할 경우 옆에 있는 단추입니다.To remove an Exclusion Case from an element, simply select the element in the Design Surface, scroll to the bottom of the Property Explorer and click the - button beside the case to remove.

통합 스토리 보드의 구현을 보려면는 UnifiedStoryboard 샘플 Xamarin iOS 8 응용 프로그램에이 문서에 첨부 합니다.To see an implementation of Unified Storyboards, look at the UnifiedStoryboard sample Xamarin iOS 8 application attached to this document.

동적 시작 화면Dynamic Launch Screens

시작 화면 파일은 앱은 실제로 시작 하는 사용자에 게 피드백을 제공 하도록 iOS 응용 프로그램은 시작 하는 동안 시작 화면으로 표시 됩니다.The launch screen file is displayed as a splash screen while an iOS application is launching to provide feedback to the user that the app is actually starting-up. IOS 8 하기 전에 개발자 포함 하기로 여러 Default.png 이미지에 응용 프로그램은 실행 하는 각 장치 유형, 방향 및 화면 해상도 대 한 자산입니다.Prior to iOS 8, the developer would have to include multiple Default.png image assets for each device type, orientation and screen resolution that the application would be running on. 예를 들어 Default@2x.png하십시오 Default-Landscape@2x~ipad.png, Default-Portrait@2x~ipad.png등입니다.For example, Default@2x.png, Default-Landscape@2x~ipad.png, Default-Portrait@2x~ipad.png, etc.

예상 되는 새 iPhone에서 6 iPhone 6 Plus 장치 (및 예정 된 Apple Watch) 모든 기존 iPhone 및 iPad 장치를 사용 하 여 다양 한 크기, 방향 및 해상도의 큰 배열을 나타냅니다이 Default.png 는 시작 화면 이미지 자산 생성 되어 유지 관리 합니다.Factoring in the new iPhone 6 and iPhone 6 Plus devices (and the upcoming Apple Watch) with all the existing iPhone and iPad devices, this represents a large array of varying sizes, orientations and resolutions of Default.png startup screen image assets that must be created and maintained. 또한 이러한 파일 상당히 클 수 있습니다 및 됩니다 "블 로트" iTunes App Store (가능한 경우 유지 셀룰러 네트워크를 통해 전달할 수 없도록)에서 응용 프로그램을 다운로드 하는 데 필요한 시간의 양을 늘리면 결과물 응용 프로그램 번들 및 최종 사용자의 장치에 필요한 저장소의 양을 늘리십시오.In addition, these files can be quite large and will "bloat" the deliverable application bundle, increasing the amount of time required to download the application from the iTunes App Store (possibly keeping it from being able to be delivered over a cellular network) and increasing the amount of storage required on the end user's device.

새 ios 8, 개발자는 단일 원자 단위를 만들 수 있습니다 .xib 자동 레이아웃 및 Size 클래스를 사용 하는 Xcode에서 파일을 동적 시작 화면 하는 모든 장치, 해상도 및 방향에 대해 작동 합니다.New to iOS 8, the developer can create a single, atomic .xib file in Xcode that uses Auto Layout and Size Classes to create a Dynamic Launch Screen that will work for every device, resolution and orientation. 이 뿐만 아니라 개발자 만들고 모든 필요한 이미지 자산, 유지 관리 하는 데 필요한 작업 양을 줄어들지만 응용 프로그램의 설치 된 번들의 크기가 크게 줄어듭니다.This not only reduces the amount of work required of the developer to create and maintain all the required image assets, but it greatly reduces the size of the application's installed bundle.

동적 시작 화면에 다음 제한 사항 및 고려 사항Dynamic Launch Screens have the following limitations and considerations:

  • 만 사용 하 여 UIKit 클래스입니다.Use only UIKit classes.
  • 단일 루트 뷰를 사용 하는 UIView 또는 UIViewController 개체입니다.Use a single root view that is a UIView or UIViewController object.
  • 응용 프로그램의 코드에 대 한 연결을 확인 하지 않습니다 (추가 하지 마세요 동작 하거나 출 선).Don’t make any connections to the application's code (don’t add Actions or Outlets).
  • 추가 안 함 UIWebView 개체입니다.Don’t add UIWebView objects.
  • 모든 사용자 지정 클래스를 사용 하지 마세요.Don’t use any custom classes.
  • 런타임 특성을 사용 하지 마세요.Don’t use runtime attributes.

염두에서 위의 지침을 살펴보겠습니다 기존 Xamarin iOS 8 프로젝트에 동적 시작 화면을 추가 합니다.With the above guidelines in mind, let's look at adding a Dynamic Launch Screen to an existing Xamarin iOS 8 project.

다음을 수행합니다.Do the following:

  1. 열기 Mac 용 Visual Studio 및 부하를 솔루션 동적 시작 화면을 추가 합니다.Open Visual Studio for Mac and load the Solution to add the Dynamic Launch Screen to.

  2. 솔루션 탐색기를 마우스 오른쪽 단추로 클릭 합니다 MainStoryboard.storyboard 파일을 선택 연결 > Xcode Interface Builder:In the Solution Explorer, right-click the MainStoryboard.storyboard file and select Open With > Xcode Interface Builder:

  3. Xcode에서 선택 파일 > 새로 만들기 > 파일... :In Xcode, select File > New > File...:

  4. 선택 iOS > 사용자 인터페이스 > 시작 화면 을 클릭 합니다 다음 단추:Select iOS > User Interface > Launch Screen and click the Next button:

  5. 파일 이름을 LaunchScreen.xib 을 클릭 합니다 만들기 단추:Name the file LaunchScreen.xib and click the Create button:

  6. 그래픽 요소를 추가 하 고 지정 된 장치, 방향 및 화면 크기에 대 한 위치로 레이아웃 제약 조건을 사용 하 여 시작 화면의 디자인을 편집 합니다.Edit the design of the launch screen by adding graphic elements and using Layout Constraints to position them for the given devices, orientations and screen sizes:

  7. 변경 내용을 저장 LaunchScreen.xib합니다.Save the changes to LaunchScreen.xib.

  8. 선택 된 응용 프로그램 대상 하며 일반 탭:Select the Applications Target and the General tab:

  9. 클릭 합니다 Info.plist 선택 단추를 선택 합니다 Info.plist Xamarin 앱을 클릭 합니다 선택 단추:Click the Choose Info.plist button, select the Info.plist for the Xamarin app and click the Choose button:

  10. 앱 아이콘 및 시작 이미지 섹션에서는 열기를 시작 화면 파일 드롭다운 선택는 LaunchScreen.xib 위에서 만든:In the App Icons and Launch Images section, open the Launch Screen File dropdown and choose the LaunchScreen.xib created above:

  11. 파일에 변경 내용을 저장 하 고 mac 용 Visual Studio로 돌아가서Save the changes to the file and return to Visual Studio for Mac.

  12. Xcode와 변경 내용 동기화를 완료 하려면 Mac 용 Visual Studio 될 때까지 기다립니다.Wait for Visual Studio for Mac to finish syncing changes with Xcode.

  13. 솔루션 탐색기를 마우스 오른쪽 단추로 클릭 합니다 리소스 폴더를 선택 추가 > 파일 추가... :In the Solution Explorer, right-click on the Resource folder and select Add > Add Files...:

  14. 선택 합니다 LaunchScreen.xib 위에서 만든 파일을 클릭 합니다 오픈 단추:Select the LaunchScreen.xib file created above and click the Open button:

  15. 애플리케이션을 빌드합니다.Build the application.

동적 시작 화면 테스트Testing the Dynamic Launch Screen

Mac 용 Visual Studio에서 iPhone 4 레 티 나 시뮬레이터를 선택 하 고 응용 프로그램을 실행 합니다.In Visual Studio for Mac, select the iPhone 4 Retina simulator and run the application. 동적 시작 화면 방향을 확인 하 고 올바른 형식으로 표시 됩니다.The Dynamic Launch Screen will be displayed in the correct format and orientation:

Mac 용 Visual Studio에서 응용 프로그램을 중지 하 고 iOS 8 iPad 장치를 선택 합니다.Stop the application in Visual Studio for Mac and select an iPad iOS 8 device. 응용 프로그램을 실행 하 고이 장치 및 방향에 대 한 시작 화면을 올바르게 포맷지 것입니다.Run the application and the launch screen will be correctly formatted for this device and orientation:

Mac 용 Visual Studio로 돌아가서 및 응용 프로그램 실행을 중지 합니다.Return to Visual Studio for Mac and stop the application from running.

IOS 7에서 작동Working with iOS 7

IOS 7 사용 하 여 이전 버전과 호환성을 유지 하려면 포함는 일반적인 Default.png 이미지 자산 iOS 8 응용 프로그램에서 정상적으로 합니다.To maintain backward compatibility with iOS 7, just include the usual Default.png image assets as normal in the iOS 8 application. iOS 이전 동작으로 반환 하 고 iOS 7 장치에서 실행 하는 경우 시작 화면으로 해당 파일을 사용 합니다.iOS will return to the previous behavior and use those files as the startup screen when running on an iOS 7 device.

Xamarin에서 동적 시작 화면의 구현을 보려면, 합니다 동적 시작 화면 이 문서에 연결 하는 iOS 8 응용 프로그램 예제입니다.To see an implementation of a Dynamic Launch Screen in Xamarin, look at the Dynamic Launch Screens sample iOS 8 application attached to this document.

요약Summary

이 문서에서는 크기 클래스와 iPhone 및 iPad 장치에서 레이아웃에 미치는 영향을 빠르게 확인을 수행 했습니다.This article took a quick look at Size Classes and how they affect layout in iPhone and iPad devices. 해당 특성, 특성 (trait) 환경 및 특성 (trait) 컬렉션 통합 인터페이스를 만들 Size 클래스를 사용 하 여 작동 하는 방법을 설명 합니다.It discussed how Traits, Trait Environments and Trait Collections work with Size Classes to create Unified Interfaces. 소요 시간은 적응 보기 컨트롤러에 대 한 간단한 설명 및 통합 인터페이스 내에서 Size 클래스를 사용 하 여 작동 방식입니다.It took brief look at Adaptive View Controllers and how they work with Size Classes inside of Unified Interfaces. Size 클래스와 완전히 통합 인터페이스를 구현에서를 확인할 C# Xamarin iOS 8 응용 프로그램 내의 코드입니다.It looked at implementing Size Classes and Unified Interfaces completely from C# code inside a Xamarin iOS 8 application.

마지막으로이 문서에서는 Xamarin iOS는 iOS 장치에서 작동 하는 디자이너를 사용 하 여 통합 스토리 보드 만들기의 기본 사항을 설명 하 고는 단일 동적 시작 화면을 만드는 모든 iOS 8 장치에서 시작 화면으로 표시 됩니다.Finally, this article covered the basics of creating Unified Storyboards with the Xamarin iOS Designer that will work across iOS devices and creating a single, Dynamic Launch Screen that will be displayed as the startup screen on every iOS 8 device.