@fiy-fish
2016-08-26T15:46:38.000000Z
字数 3247
阅读 1502
iOS点滴
- (UIViewController *)viewController {
UIResponder *next = self.nextResponder;
do {
//判断响应者是否为视图控制器
if ([next isKindOfClass:[UIViewController class]]) {
return (UIViewController *)next;
}
next = next.nextResponder;
} while (next != nil);
return nil;
}
- (void)openLight:(UIButton *)sender{
AVCaptureDevice *device = self.device;
//修改前必须先锁定
[self.device lockForConfiguration:nil];
//必须判定是否有闪光灯,否则如果没有闪光灯会崩溃
if ([self.device hasFlash]) {
if (self.device.flashMode == AVCaptureFlashModeOff) {
self.device.flashMode = AVCaptureFlashModeOn;
self.device.torchMode = AVCaptureTorchModeOn;
} else if (self.device.flashMode == AVCaptureFlashModeOn) {
self.device.flashMode = AVCaptureFlashModeOff;
self.device.torchMode = AVCaptureTorchModeOff;
}
}
[device unlockForConfiguration];
}
如果plist文档和代码同时设置呢?
1.(UIStatusBarStyle)preferredStatusBarStyle;
typedef NS_ENUM(NSInteger, UIStatusBarStyle) {
UIStatusBarStyleDefault = 0, // Dark content, for use on light backgrounds
UIStatusBarStyleLightContent NS_ENUM_AVAILABLE_IOS(7_0) = 1, // Light content, for use on dark backgrounds
UIStatusBarStyleBlackTranslucent NS_ENUM_DEPRECATED_IOS(2_0, 7_0, "Use UIStatusBarStyleLightContent") = 1,
UIStatusBarStyleBlackOpaque NS_ENUM_DEPRECATED_IOS(2_0, 7_0, "Use UIStatusBarStyleLightContent") = 2,
} __TVOS_PROHIBITED;
在当前viewController中,重写此方法,可以改变当前控制器的状态栏颜色;
而且只能影响当前控制器(子控制器的状态栏颜色)
2.- (UIViewController *)childViewControllerForStatusBarStyle;
一般我们写项目在AppDelegate中都会写 self.window.rootViewController = navgationViewController;
当我们调用preferredStatusBarStyle
时,调用的是navgationViewController中的preferredStatusBarStyle方法,而不是自己的的preferredStatusBarStyle,此时我们就可以在navigationViewController(或者其他控制器的父类)中重写`- (UIViewController *)childViewControllerForStatusBarStyle;
- (UIViewController *)childViewControllerForStatusBarStyle{
return self.topViewController;
}
上面代码的意思就是说,不要调用我自己(就是UINavigationController)的preferredStatusBarStyle方法,而是去调用navigationController.topViewController的preferredStatusBarStyle方法,这样写的话,就能保证当前显示的UIViewController的preferredStatusBarStyle方法能影响statusBar的前景部分。
有时候,我们要实时改变当前控制器的状态栏颜色,可是正常情况下,
preferredStatusBarStyle
只能调用一次,这时,我们调用方法setNeedsStatusBarAppearanceUpdate
来刷新当前状态栏的颜色,可以多次调用preferredStatusBarStyle
导航栏和状态栏一个颜色
状态栏(姑且叫它状态栏吧)可以自由设置颜色,并且,可与导航栏颜色不同
1、position是layer中的anchorPoint在superLayer中的位置坐标。
2、互不影响原则:单独修改position与anchorPoint中任何一个属性都不影响另一个属性。
3、frame、position与anchorPoint有以下关系:
今天用【mutableArr addObject:someObject】 没有触发KVO ,终于知道原因所在了