Difference between revisions of "UIBackdropView"

From iPhone Development Wiki
Jump to: navigation, search
(Available settings classes (styles): Updated for iOS 10 + reformatted for easier future changes.)
(About graphics quality: Rewording + fixing.)
Line 227: Line 227:
 
== About graphics quality ==
 
== About graphics quality ==
  
The styles have different graphic qualities. If you don't specify it, the "best matching" quality for your device is used (using [UIDevice _graphicsQuality]). There are two values: 10 and 100. 100 looks better, but needs more resources. On default, iPad2,6, iPad2,7, iPad3,4, iPad3,5, iPad3,6, iPhone4,1, iPhone5,1, iPhone5,2, iPod5,1 get 100, the other devices get 10 (as of iOS 8.1). To manually set a graphic quality to a style, use
+
Some styles require higher graphics quality, determined using [UIDevice _graphicsQuality] and might not be suitable for legacy devices. There are two values: 10 and 100. 100 looks better, but needs more resources. On default, iPad2,6, iPad2,7, iPad3,4, iPad3,5, iPad3,6, iPhone4,1, iPhone5,1, iPhone5,2, iPod5,1 get 10, the other devices get 100 (as of iOS 8.1). To manually set a graphic quality to a style, use
  
 
<source lang="objc">
 
<source lang="objc">
[_UIBackdropViewSettings settingsForStyle:2030 arg1 graphicsQuality:100]; //replace 2030 and 100 with whatever you need.
+
[_UIBackdropViewSettings settingsForStyle:2030 graphicsQuality:100]; // request style 2030 at highest graphics quality (100)
 +
[_UIBackdropViewSettings settingsForStyle:2030 graphicsQuality:10]; // request style 2030 at lower graphics quality (10)
 
</source>
 
</source>
 
If you specify the graphics quality as 10 (or use the default, and it is 10 on the device), the blur quality "low" will be used (if you don't override it).
 
  
 
== Applying blur settings/style ==
 
== Applying blur settings/style ==

Revision as of 13:06, 5 July 2017

_UIBackdropView is a private class in UIKit.framework (iOS 7.0+), a subclass of UIView, which is used for the popular blur effects.

It uses a CABackdropLayer with a gaussianBlur CAFilter (kCAFilterGaussianBlur) .[1]

Creating Settings

_UIBackdropView uses a _UIBackdropViewSettings object for its setup. There are many ways to create it:

_UIBackdropViewSettings *settings = (_UIBackdropViewSettings *)[[[_UIBackdropViewSettingsSemiLight alloc] init] autorelease];

_UIBackdropViewSettings *settings = [_UIBackdropViewSettings settingsForStyle:2070];

_UIBackdropViewSettings *settings = [_UIBackdropViewSettings settingsForPrivateStyle:2070]; //this only calls settingsForStyle internally, so there are no advantages of using it over settingsForStyle 

_UIBackdropViewSettings *settings = [[[_UIBackdropViewSettings alloc] initWithDefaultsValue] autorelease];

_UIBackdropViewSettings *settings = [_UIBackdropViewSettings settingsForStyle:2030 graphicsQuality:100] ; //can be either 10 or 100, 100 is better. See notes at the bottom

Available settings classes (styles)

Here's a list with known settings classes (subclasses of _UIBackdropViewSettings) available.

_UIBackdropViewSettingsCombiner
	style: 3

_UIBackdropViewSettingsNone
	style: -2

_UIBackdropViewSettingsLight
	style: 0, 1000, 1003, 2020, 10090, 10100

_UIBackdropViewSettingsDark
	style: 0, 1001, 1100, 2030, 11050, 11060
	application: Notification Center, Keyboard (Dark), Safari Navigation Bar (Private mode)

_UIBackdropViewSettingsBlur
	style: 2
	application: Common blurring

_UIBackdropViewSettingsColorSample
	style: 2000

_UIBackdropViewSettingsUltraLight
	style (iOS 7): 2010
	style (iOS 8+): 2010, 10050, 10060, 10070, 10080, 10110
	application: Alert views and various UI (White)
	comment: fallback of unsupported styles

_UIBackdropViewSettingsLightLow
	style: 2029
	comment: Optimized version of _UIBackdropViewSettingsLight

_UIBackdropViewSettingsDarkWithZoom
	style: 2031

_UIBackdropViewSettingsDarkLow
	style: 2039
	comment: Optimized version of _UIBackdropViewSettingsDark

_UIBackdropViewSettingsColored
	style: 2040
		Tint: rgba(0.0196078, 0.0196078, 0.0196078, 1)
	style: 10091
		Tint (iOS 7): rgba(0.160784, 1, 0.301961, 1)
		Tint (iOS 8): rgba(0.160784, 1, 0, 1)
		Tint (iOS 9+): rgba(0.160784, 1, 0.301961, 1)
	style: 10092
		Tint (iOS 7): rgba(1, 0.0980392, 0.0470588, 1)
		Tint (iOS 8): rgba(1, 0.098039, 0.047059, 1)
		Tint (iOS 9+): rgba(1, 0.0980392, 0.0470588, 1)
	style: 10120
		Tint (iOS 7): rgba(0.0313725, 0.262745, 0.560784, 1)
		Tint (iOS 8): rgba(0.031373, 0.262745, 0.560784, 1)
		Tint (iOS 9+): rgba(0.0313725, 0.262745, 0.560784, 1)

_UIBackdropViewSettingsUltraDark
	style: 2050, 11070

_UIBackdropViewSettingsAdaptiveLight
	style: 2060
	application: Control Center

_UIBackdropViewSettingsSemiLight
	style: 2070

_UIBackdropViewSettingsFlatSemiLight
	style: 2071

_UIBackdropViewSettingsUltraColored
	style: 2080

=== iOS 7.1+ ===

_UIBackdropViewSettingsPasscodePaddle
	style: 3900

_UIBackdropViewSettingsLightKeyboard
	style: 3901

=== iOS 9.0+ ===

_UIBackdropViewSettingsLightEmojiKeyboard
	style: 3902

_UIBackdropViewSettingsATVSemiLight
	style: 4000

_UIBackdropViewSettingsATVMediumLight
	style: 4001

_UIBackdropViewSettingsATVLight
	style: 4002

_UIBackdropViewSettingsATVUltraLight
	style: 4003

_UIBackdropViewSettingsATVMenuLight
	style: 4004

_UIBackdropViewSettingsATVSemiDark
	style: 4005

_UIBackdropViewSettingsATVMediumDark
	style: 4006

_UIBackdropViewSettingsATVDark
	style: 4007

_UIBackdropViewSettingsATVUltraDark
	style: 4008

_UIBackdropViewSettingsATVMenuDark
	style: 4009

_UIBackdropViewSettingsATVAdaptive
	style: 4010

_UIBackdropViewSettingsATVAdaptiveLighten
	style: 4011

_UIBackdropViewSettingsATVAccessoryLighten
	style: 4012

=== iOS 9.3+ ===

_UIBackdropViewSettingsATVAccessoryDark
	style: 4013

Creating Sample

// Creating blur view using settings object
_UIBackdropViewSettings *settings = [_UIBackdropViewSettings settingsForStyle:2060];

// initialization of the blur view
_UIBackdropView *blurView = [[_UIBackdropView alloc] initWithFrame:CGRectZero
                                              autosizesToFitSuperview:YES settings:settings];
// another way for initialization
_UIBackdropView *blurView = [[_UIBackdropView alloc] initWithSettings:settings];

// or without settings object implementation
_UIBackdropView *blurView = [[_UIBackdropView alloc] initWithStyle:2060];

[someView addSubview:blurView];
[blurView release];

About _UIBackdropViewSettingsColored

You can give it a tint color (in fact, it already has a default tint color, and some styles (10091, 10092, 10120) set their own). Example:

_UIBackdropViewSettings *settings = [[_UIBackdropViewSettingsColored alloc]init];
[settings setTintColor:[UIColor colorWithRed:1 green:0 blue:0 alpha:1];
//now use it somewhere

For iOS 9

_UIBackdropViewSettings *settings = [_UIBackdropViewSettings settingsForPrivateStyle:2040];
[settings setColorTint:[UIColor colorWithRed:1 green:0 blue:0 alpha:1]];
//now use it somewhere

Blurring Sample

There are only two blur qualities available.

  • low
  • default (Assumed to be "medium")

They correspend to the kCAFilterGaussianBlur's property "inputQuality"

[blurView setBlurRadiusSetOnce:NO];
[blurView setBlurRadius:10.0];
[blurView setBlurHardEdges:3];
[blurView setBlurWithHardEdges:YES];
[blurView setBlurQuality:@"low"];

Tinting Sample

[blurView setRequiresColorStatistics:YES];
[blurView setUsesColorTintView:YES];
UIColor *color = [UIColor cyanColor];
[blurView setColorTint:color]; // or you may use - (void)transitionToColor:(UIColor *)color;
[blurView setColorTintAlpha:0.8];
[blurView setColorTintMaskAlpha:0.7];

About graphics quality

Some styles require higher graphics quality, determined using [UIDevice _graphicsQuality] and might not be suitable for legacy devices. There are two values: 10 and 100. 100 looks better, but needs more resources. On default, iPad2,6, iPad2,7, iPad3,4, iPad3,5, iPad3,6, iPhone4,1, iPhone5,1, iPhone5,2, iPod5,1 get 10, the other devices get 100 (as of iOS 8.1). To manually set a graphic quality to a style, use

[_UIBackdropViewSettings settingsForStyle:2030 graphicsQuality:100]; // request style 2030 at highest graphics quality (100)
[_UIBackdropViewSettings settingsForStyle:2030 graphicsQuality:10]; // request style 2030 at lower graphics quality (10)

Applying blur settings/style

There are several ways for doing this by methods.

Signature - (void)transitionIncrementallyToPrivateStyle:(NSInteger)style weighting:(float)weight;
Available in 7.0 –
Signature - (void)transitionIncrementallyToStyle:(NSInteger)style weighting:(float)weight;
Available in 7.0 –
Signature - (void)transitionToSettings:(_UIBackdropViewSettings *)settings;
Available in 7.0 –
Signature - (void)transitionToPrivateStyle:(NSInteger)style;
Available in 7.0 –
Signature - (void)transitionToStyle:(NSInteger)style;
Available in 7.0 –

transitionIncrementallyToPrivateStyle and transitionIncrementallyToStyle do the same (transitionIncrementallyToPrivateStyle calls transitionIncrementallyToStyle internally). transitionToSettings and transitionToPrivateStyle are equivalent too.

For example

_UIBackdropViewSettings *newSettings = [_UIBackdropViewSettings settingsForPrivateStyle:0];

// Whatever configuration for the settings

[blurView setInputSettings:newSettings];

Getting/Parsing all _UIBackdropView objects at runtime

NSArray *blurViews = [_UIBackdropView allBackdropViews];

for (_UIBackdropView *view in blurViews) {
      NSLog(@"This _UIBackdropView style is: %d", view.style);
     // do any _UIBackdropView configuration here
}

References