Xamarin.iOS의 모양 API

iOS를 사용하면 변경 내용이 애플리케이션에서 해당 컨트롤의 모든 인스턴스에 적용되도록 개별 개체가 아닌 정적 클래스 수준에서 시각적 속성 설정을 적용할 수 있습니다.

이 기능은 지원하는 모든 UIKit 컨트롤의 정적 Appearance 속성을 통해 Xamarin.iOS에서 노출됩니다. 따라서 시각적 모양(색조 색 및 배경 이미지와 같은 속성)을 쉽게 사용자 지정하여 애플리케이션에 일관된 모양을 제공할 수 있습니다. 모양 API는 iOS 5에서 도입되었으며 일부 부분은 iOS 9에서 사용되지 않지만 Xamarin.iOS 앱에서 스타일 지정 및 테마 효과를 얻을 수 있는 좋은 방법입니다.

개요

iOS를 사용하면 많은 UIKit 컨트롤의 모양을 사용자 지정하여 표준 컨트롤이 애플리케이션에 적용하려는 브랜딩을 준수하도록 할 수 있습니다.

사용자 지정 모양을 적용하는 방법에는 두 가지가 있습니다.

  • 컨트롤 인스턴스 에서 직접 – 도구 모음, 탐색 모음, 단추 및 슬라이더를 비롯한 여러 컨트롤에서 색조 색, 배경 이미지 및 제목 위치(기타 특성)를 설정할 수 있습니다.

  • Appearance 정적 속성 의 기본값을 설정합니다. 각 컨트롤에 대해 사용자 지정 가능한 특성은 정적 속성을 통해 Appearance 노출됩니다. 이러한 속성에 적용하는 모든 사용자 지정은 속성이 설정된 후에 만들어진 해당 형식의 모든 컨트롤에 대한 기본값으로 사용됩니다.

모양 샘플 애플리케이션은 다음 스크린샷에 표시된 것처럼 세 가지 방법을 모두 보여 줍니다.

The Appearance sample application demonstrates all three methods

iOS 8부터 모양 프록시가 TraitCollections로 확장되었습니다. AppearanceForTraitCollection 는 특정 특성 컬렉션의 기본 모양을 설정하는 데 사용할 수 있습니다. 이에 대한 자세한 내용은 스토리보드 소개 가이드에서 확인할 수 있습니다 .

모양 속성 설정

첫 번째 화면에서 정적 모양 클래스는 다음과 같이 단추 및 노란색/주황색 요소의 스타일을 지정하는 데 사용됩니다.

// Set the default appearance values
UIButton.Appearance.TintColor = UIColor.LightGray;
UIButton.Appearance.SetTitleColor(UIColor.FromRGB(0,127,14), UIControlState.Normal);

UISlider.Appearance.ThumbTintColor = UIColor.Red;
UISlider.Appearance.MinimumTrackTintColor = UIColor.Orange;
UISlider.Appearance.MaximumTrackTintColor = UIColor.Yellow;

UIProgressView.Appearance.ProgressTintColor = UIColor.Yellow;
UIProgressView.Appearance.TrackTintColor = UIColor.Orange;

녹색 요소 스타일은 기본값 및 Appearance 정적 클래스를 재정의 ViewDidLoad 하는 메서드에서 다음과 같이 설정됩니다.

slider2.ThumbTintColor = UIColor.FromRGB (0,127,70); // dark green
slider2.MinimumTrackTintColor = UIColor.FromRGB (66,255,63);
slider2.MaximumTrackTintColor = UIColor.FromRGB (197,255,132);
progress2.ProgressTintColor = UIColor.FromRGB (66,255,63);
progress2.TrackTintColor = UIColor.FromRGB (197,255,132);

Xamarin.Forms에서 UIAppearance 사용

모양 API는 Xamarin.Forms 솔루션에서 iOS 앱을 스타일링할 때 유용할 수 있습니다. 클래스의 몇 줄은 AppDelegate 사용자 지정 렌더러를 만들지 않고도 특정 색 구성표를 구현하는 데 도움이 될 수 있습니다.

사용자 지정 테마 및 UIAppearance

iOS를 사용하면 UIAppearance API를 사용하여 사용자 인터페이스 컨트롤의 많은 시각적 특성을 "테마화"하여 특정 컨트롤의 모든 인스턴스가 동일한 모양을 갖도록 할 수 있습니다. 이는 컨트롤의 개별 인스턴스가 아닌 많은 사용자 인터페이스 컨트롤 클래스에서 Appearance 속성으로 노출됩니다. 정적 Appearance 속성에 표시 속성을 설정하면 애플리케이션에서 해당 형식의 모든 컨트롤에 영향을 줍니다.

개념을 더 잘 이해하려면 예제를 고려하세요.

Magenta 색조를 갖도록 특정 UISegmentedControl 컨트롤을 변경하려면 다음과 같이 ViewDidLoad화면에서 특정 컨트롤을 참조합니다.

sg1.TintColor = UIColor.Magenta;

또는 디자이너의 속성 패드에서 값을 설정합니다.

Properties Pad Tint

아래 이미지는 'sg1'이라는 컨트롤에만 색조를 설정하는 것을 보여 줍니다.

Setting the individual control tint

이러한 방식으로 많은 컨트롤을 설정하는 것은 완전히 비효율적이므로 클래스 자체에서 정적 Appearance 속성을 대신 설정할 수 있습니다. 아래 코드에 나와 있습니다.

UISegmentedControl.Appearance.TintColor = UIColor.Magenta;

이제 아래 이미지는 모양이 Magenta로 설정된 분할된 컨트롤을 모두 보여 줍니다.

Setting the Appearance control tint

Appearance 속성은 AppDelegate 이벤트 FinishedLaunching 와 같이 애플리케이션 수명 주기 초기에 설정하거나 영향을 받는 컨트롤이 표시되기 전에 ViewController에서 설정해야 합니다.

자세한 내용은 모양 API 소개를 참조하세요.