ino*_*nik 2 quartz-graphics ios paintcode
我在PaintCode中创建了一个自定义按钮.PC有很多关于创建图形的文档,但没有使用它们.
我的方法有效,但它有问题,我会去...我走了一个UIButton子类的路径,我把它放在我的故事板中.然后我给它分配了我的自定义按钮类,我们称之为customButton.使用此方法,您可以在IB中连接动作,并且突出显示的状态由touchesBegan和touchesEnded方法一起处理,该变量与切换突出显示的视图的变量串联,但问题是,突出显示的状态永远不会显示在快速触摸上.
customButton.m:
@interface customButton ()
@property BOOL isPressed;
@end
@implementation customButton
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
}
return self;
}
-(void) awakeFromNib {
[super awakeFromNib];
_buttonText = @"Post";
}
- (void)drawRect:(CGRect)rect
{
[StyleKit drawCustomButtonWithFrame:rect pressed:_isPressed buttonText:_buttonText];
}
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
_isPressed = YES;
[self setNeedsDisplay];
}
- (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
[self sendActionsForControlEvents:UIControlEventTouchUpInside];
_isPressed = NO;
[self setNeedsDisplay];
}
Run Code Online (Sandbox Code Playgroud)
我的问题:有没有更好的方法来实现使用PaintCode绘制的按钮?这个问题是它并不总是显示突出显示的状态,并且感觉有点hacky.当然有更好的方法吗?
解决这个问题的最佳方法是覆盖该highlighted属性UIControl.它是按钮状态的最准确指示器.我正在使用swift,但翻译成ObjC是微不足道的:
class VectorizedButton: UIButton {
override var highlighted: Bool {
didSet {
setNeedsDisplay()
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,不要传入_isPressed,只需传入highlighted(或[self highlighted]).
为了完整起见:
- (void)setHighlighted:(BOOL)isHigh
{
[super setHighlighted:isHigh];
[self setNeedsDisplay];
}
Run Code Online (Sandbox Code Playgroud)
完整的代码示例:
注意我更进了一步,突出显示按钮是否未启用或突出显示.
class VectorizedButton: UIButton {
override var highlighted: Bool {
didSet {
setNeedsDisplay()
}
}
// MARK: - Init & Dealloc
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override func awakeFromNib() {
super.awakeFromNib()
backgroundColor = UIColor.clearColor()
}
// MARK: - Private methods
private var shouldHighlight: Bool {
return highlighted || !enabled
}
// MARK: - Public methods
override func drawRect(rect: CGRect) {
StyleKit.drawMyButton(frame: bounds, highlighted: shouldHighlight)
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2725 次 |
| 最近记录: |