2012-05-03 3 views
2

사용자 지정 단추를 그릴 때 paintcodeapp를 사용하고 있습니다. 가 나는 버튼에있을 때 setNeedsDisplay를 호출 할 필요가 "정상"두 개의 서로 다른 상태 "를 누르면"과누를 때 다시 그리기 UIButton

을 그리는했습니다 나는 다음 두 가지가 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]; 
} 

그러나 그것은 작동하지 않습니다. 제안 사항이 있으십니까? 나는 그것을 관리 할 버튼이 일반적인 관점에서 구현되는 것으로 가정

-(void)didDetectEvent:(id)sender { 
    UIButton *btn = (UIButton *)sender; 
    [btn setNeedsDisplay]; 
} 

:와

답변

0

는보십시오.

+0

또한 0.2 초 후에 setNeedsDisplay를 호출해야했습니다. 나는 다른 대답으로 코드를 게시 할 것이다. – Luka

0
- (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]; 
} 

이 작동합니다. 나는 이것이 최선의 해결책이라고 완전히 확신하지 못한다.

1

나는 스위프트를 사용하여 이와 동일한 문제가 발생했습니다. 배경을 설정하고 사용자의 UI가 느려지더라도 즉시 표시해야합니다. 해결 방법은 주 스레드에서 완료되었는지 확인하는 것입니다.

dispatch_async(dispatch_get_main_queue(), { 
    testButton?.backgroundColor = .greenColor() 
}) 
관련 문제