문제

iPhone 앱에 대해 매우 간단한 라인 드로잉 애니메이션을 구현하려고합니다. 지연 후 내 시야에 사각형을 그리고 싶습니다. 사용 중입니다 performSelector 내 드로잉 방법을 실행합니다.

-(void) drawRowAndColumn: (id) rowAndColumn
{
    int rc = [rowAndColumn intValue];
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetLineWidth(context, 2.0);
    CGContextSetStrokeColorWithColor(context, currentColor.CGColor);
    CGRect rect = CGRectMake(rc * 100, 100, 100, 100);
    CGContextAddRect(context, rect);
    CGContextDrawPath(context, kCGPathFillStroke);

}

그런 다음 다음을 통해 호출됩니다.

int col = 10;
[self performSelector:@selector(drawRowAndColumn:) 
           withObject:[NSNumber numberWithInt:col]
           afterDelay:0.2];

그러나 그것은 그 때처럼 보인다 drawRowAndColumn: 메시지가 실제로 전송되며 더 이상 유효한 액세스 권한이 없습니다. CGContextRef, 다음과 같은 오류가 발생합니다.

<Error>: CGContextAddRect: invalid context

내가 교체하면 performSelector 직접 전화로 drawRowAndColumn, 그것은 잘 작동합니다. 그래서 나의 첫 번째 아이디어는 또한 CGContextRef TH를 통해 performSelector, 그러나 나는 여러 논증을 동시에 통과시키는 방법을 알 수없는 것 같습니다 (또 다른 좋은 질문입니다.)

위의 코드에 무슨 문제가 있습니까?

도움이 되었습니까?

해결책

당신은 그런 식으로 언제든지 그릴 수 없습니다. 당신은 그것을 구현해야합니다 drawRect: uiview의 방법과 도면 코드를 거기에 넣습니다. 얻기 위해 drawRect: 발사하려면 Cocoa에게 전망을 그려야한다는 것을 알려야합니다. 이를 위해 전화 할 수 있습니다 setNeedsDisplay, 또는 setNeedsDisplayInRect:.

이 방법을 직접 번역하면 PerformSelector : WithObject : AfterDelay- 그러나 애니메이션을 수행하는 좋은 방법은 아닙니다.

그것은 당신이 실제로하려고하는 일에 달려 있지만 예를 들어 드로잉 코드를 넣는 것과 같이 고려할 수 있습니다. drawRect 내가 제안한대로, 숨겨진보기를 시작하십시오. 그런 다음 Sethidden을 호출 할 수 있습니다. Performselector를 사용하여 지연 후에 나타나지 않거나 숨겨지지 않지만 알파가 0 인 다음 Uiview 애니메이션 블록 내에서 알파를 1으로 변경하여 매끄럽게 애니메이션 할 수 있습니다 (많은 것들이 있습니다. 이것은 문서에서).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top