2014-09-16 1 views
0

간단한 응용 프로그램을 작성 초래하고 bg.drawInRect 때 오류가 발생하지 않는 이유UIImage.DrawInRect 오류/알림

Code

정말 모르는 오류없이 그것을 할 수 없습니다 player.drawInRect가 원인입니까? CGContextRestoreGState : 잘못된 상황이 0x0 및 문제는 우리

구월 16 22시 13분 16초 아이맥 admin.lan Letalka_drawrect [804] 좌표를 변경하면 그 화상이 재기록/드로잉하지 않는 것이다. 이것은 심각한 오류입니다. 이 응용 프로그램이나이 라이브러리가 사용하는 라이브러리는 유효하지 않은 컨텍스트 을 사용하므로 시스템 안정성 및 신뢰성이 전반적으로 저하됩니다. 이 알림은 예의입니다. 문제를 해결하십시오. 곧 업데이트 될 치명적인 오류가 될 것입니다.

+0

코어 그래픽 기능이 drawrect 외부에서 호출 되었기 때문에이 오류가 발생했음을 알았지 만 타이머 기능에서 어떻게 변경 될 수 있습니까? –

+1

스크린 샷 대신 질문에 직접 코드를 복사하십시오. 우리는 스크린 샷에서 복사/붙여 넣기 수 없습니다 –

+0

그래, 정확하게는 조언을위한 thnks, 그것은 –

답변

1

drawRect 통화 외부에서 타이머를 시작해야합니다. didMoveToSuperview은 좋은 장소 일 수 있지만 달성하려는 대상에 따라 다릅니다. 그런 다음 timerRedraw에서 setNeedsDisplay()으로 전화하면 다시 그릴 수 있습니다.

var timer: NSTimer? 

override func didMoveToSuperview() { 
    // Stop the timer if it was already running 
    if timer != nil { 
     timer.invalidate() 
     timer = nil 
    } 

    // Only start the timer if the view is actually part of a view hierarchy 
    if superview != nil { 
     timer = NSTimer.scheduledTimerWithTimeInterval(interval, target: self, selector: "timerRedraw", userInfo: nil, repeats: true) 
    } 
} 

func timerRedraw() { 
    x += 5 
    y += 6 
    setNeedsDisplay() 
} 

은 내가보기 엔 Drawing and Printing Guide for iOS 애플은, 당신이 아이폰 OS에서 그리기 사용자 정의하고 시작하기 위해 알아야 할 모든 것을 설명 읽어 보시기 바랍니다.

+0

작업 최선을 정말 helpfull이다), 그러나 약간의 보정 내가 FUNC의 setNeedsDisplayInRect를 사용하는 (RECT 필요 필요 : CGRect)를 이것은 setNeedsDisplayInRect (CGRectMake (x-5, y-6, rocket.size.width, rocket.size.height))입니다. –

+0

'drawRect'는 뷰의 어느 부분이되어야 하는지를 결정하는 데 사용되는'rect' 매개 변수를 가지고 있습니다 그어진. 'setNeedsDisplayInRect (rect :)'는'drawRect' 함수에'CGRect'를 넘깁니다. 'setNeedsDisplay()'는 뷰의'bounds'를'drawRect'에 대신 전달합니다. 'drawRect' 함수에서'rect' 매개 변수를 사용하는 것 같지 않으므로 호출 될 때마다 전체보기를 다시 그려야합니다. 'setNeedsDisplay()'는이 경우보다 적절한 함수처럼 보입니다. –

+0

Mike, 코드에서 주석의 형식을 지정하는 방법을 읽을 수 있습니까? > \ t을 사용하려고하지만 도움이되지 않습니다. –