外观代理和图层

kti*_*gle 2 uikit ios ios5

是否可以使用iOS 5外观代理来重构在图层上设置属性的代码?

_button.layer.cornerRadius = 5.0f;
_button.layer.borderWidth = 1.0f;
_button.layer.borderColor = [[UIColor blackColor] CGColor];
_button.layer.masksToBounds = YES;
Run Code Online (Sandbox Code Playgroud)

San*_*man 7

接受的答案是不正确的.您可以在图层上设置属性,但是,您需要对视图进行子类化并通过访问器公开图层属性.

为了说明,我将只使用问题中的一个属性cornerRadius:

第1步:实现UIButton子类.

#import <UIKit/UIKit.h>

@interface MyRoundedCornerButton : UIButton

@end
Run Code Online (Sandbox Code Playgroud)

第2步:添加标记为的属性UI_APPEARANCE_SELECTOR.

#import <UIKit/UIKit.h>

@interface MyRoundedCornerButton : UIButton

@property (readwrite, nonatomic) CGFloat cornerRadius UI_APPEARANCE_SELECTOR;

@end
Run Code Online (Sandbox Code Playgroud)

第3步:实现新类.

@implementation MyRoundedCornerButton

- (void)setCornerRadius:(CGFloat)cornerRadius
{
    self.layer.cornerRadius = cornerRadius;
}

@end
Run Code Online (Sandbox Code Playgroud)

步骤4:在外观代理中设置角半径.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    ...
    [MyRoundedCornerButton appearance].cornerRadius = 10.0;
    ...
}
Run Code Online (Sandbox Code Playgroud)

步骤5:然后在IB中,(或者在您定义View的创建的任何地方),将自定义视图类设置为(或实例化)MyRoundedCornerButton而不是UIButton.

注意:我这样做是为了在我的应用程序中应用易于更改的渐变背景.在我的例子中,所有视图控制器的根视图都使用自定义类.这个自定义类提供了一个CAGradientLayer通过该+(Class)layerClass方法.然后,我露出colorslocations使用下面的梯度层的属性UI_APPEARANCE_SELECTOR标记.在应用初始化时设置一次可自定义整个应用.您甚至可以将颜色显示给用户,以允许他们完全自定义各种控件的颜色.

  • @Benjohn,实际上你可以将它们添加到类别中.我已经为UIViews添加了一个borderWidth和borderColor属性,可以在我的应用程序中的任何UIView上设置. (2认同)