[英]redraw UIButton when pressed
我正在使用paintcodeapp繪制我的自定義按鈕。 我畫了兩種不同的狀態:“按下”和“正常”
當按鈕處於“按下狀態”時,我需要調用setNeedsDisplay
然后,我在drawRect:
方法中使用self.highlighted
調度兩個繪制
我嘗試過:
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[self addTarget:self action:@selector(didDetectEvent:) forControlEvents:UIControlEventTouchDown];
[self addTarget:self action:@selector(didDetectEvent:) forControlEvents:UIControlEventTouchUpInside];
[self addTarget:self action:@selector(didDetectEvent:) forControlEvents:UIControlStateNormal];
}
return self;
}
-(void)didDetectEvent:(id)sender {
[self setNeedsDisplay];
}
但這不起作用。 有什么建議嗎?
我有同樣的問題(使用Swift)。 我需要設置背景並立即顯示它,即使它減慢了用戶界面的速度。 解決方案是確保它在主線程上完成。
dispatch_async(dispatch_get_main_queue(), {
testButton?.backgroundColor = .greenColor()
})
嘗試:
-(void)didDetectEvent:(id)sender {
UIButton *btn = (UIButton *)sender;
[btn setNeedsDisplay];
}
我假設它是在具有要管理的按鈕的通用視圖中實現的。
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[self addTarget:self action:@selector(didDetectEvent:) forControlEvents:UIControlEventAllTouchEvents];
}
}
-(void)didDetectEvent:(id)sender {
[self setNeedsDisplay];
[self performSelector:@selector(setNeedsDisplay) withObject:nil afterDelay:0.2];
}
這可行。 我不確定這是最佳解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.