2014-04-07 1 views
0

UIBezierPath를 사용하여 초기 간단한 rect를 그리고 색으로 채 웁니다. 어떻게 만지면 색깔 만 바꿀 수 있습니까?UIBezierPath를 사용하여 rect 다시 그리기

- (void) drawRect:(CGRect)rect 
{ 
    // Drawing code 
    [self drawRectWithFrame:_myRect fillColor:_firstColor]; 
} 
- (void) drawRectWithFrame:(CGRect)frame fillColor:(UIColor *)color 
{ 
    [color setFill]; 
    UIBezierPath *path = [UIBezierPath bezierPathWithRect:frame]; 
    [path fill]; 
} 
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    //get the rect color from touches (pixel color)  
    UIColor *color = [self getRectColorFromTouches:touches]; 

    //chnage the rect color 
    if (color == _firstColor) { 

    //doesn't work 
    //[self drawRectWithFrame:_myRect fillColor:_secondColor]; //?? 
     //How can I do that? 
    } 
    else { 
     //?? 
    }  
} 
+0

정말 확실합니까? 그는'if (color == _firstColor)'if 문을 사용합니까? –

+0

@ pasta12 감사합니다. 네, 확신합니다. _italic_ ** bold **'[self drawRectWithFrame : _myRect fillColor : _secondColor];'오류가 발생합니다. – suyama

+0

오류를 게시 할 수 있습니까? –

답변

0

일부 발언 :

  • 대신 최우선 UIView의 터치 이벤트 방법, 당신은 UIGestureRecognizer를 사용해야합니다. 귀하의 경우 UItapGestureRecognizer이면 충분할 수 있습니다. (이 방법을 사용하면 다른 터치 동작 간의 충돌을 처리하는 것이 더 쉬워 지므로 제스처 인식기가 만들어졌습니다.)

  • 탭을 받으면 뷰의 로컬 속성을 변경합니다 (예 : BOOL isRectangleDrawn). 뷰 탭) 마지막으로

  • 를 수신 할 때마다 변경 -하고 그렇지 않으면 정확해야한다는, 코드에서 누락 무엇 -보기의 - (void) drawRect:(CGRect)rect 메소드가 호출되는 확인하기 위해 [self setNeedsDisplay]를 호출하는 것을 잊지 마세요

+0

OK. 나는 이것을하려고 노력할 것이다. 감사. – suyama

+0

그것은 작동합니다. 고맙습니다. 하지만 다음과 같은 오류가 발생합니다 : _italic_ ** bold **' : CGContextRestoreGState : 컨텍스트 0x0이 잘못되었습니다. 이것은 심각한 오류입니다. 이 응용 프로그램 또는이 응용 프로그램이 사용하는 라이브러리는 잘못된 컨텍스트를 사용하므로 시스템 안정성과 안정성이 전반적으로 저하됩니다. 이 통지는 예의입니다.이 문제를 해결하십시오. 다가올 업데이트에서 치명적인 오류가 될 것입니다. 나는이 오류를 접했다. [link] (http://stackoverflow.com/questions/19599266/invalid-context-0x0-under-ios-7-0-and-system-degradation) – suyama

+0

잘 모르겠다. 이것에 관해서, 나는 당신의 링크에 언급 된'UITextField' 버그를 만났습니다. 'UIBezier' 드로 호출 바로 전에'drawRect'에'UIGraphicsBeginImageContext'를 추가하십시오 ... – Vinzzz