2011-02-11 2 views
0

CGContextClipToMask() 함수를 사용하여 다양한 색상의 입자를 만들려고합니다. 웬일인지, 나의 첫번째 입자는 갱신을 통해 완전히 보여지고 움직이는 것처럼 보이지만 다른 입자는 전혀 보이지 않는다. 다음 코드 중 일부이다이미지 마스킹으로 입자 생성

나는 ClipToMask 호출을 주석 때, 나는 내 모든 다양한 채우기의 구형은 (애니메이션 참조
while(i < mNextParticleIndex) 
    { 
     Particle* p = &mParticles[i]; 

     CGRect drawRect = CGRectMake(
      p->mPos.x, 
      p->mPos.y, 
      p->mSize, 
      p->mSize); 

     // try image masking 
     CGContextClipToMask(context, drawRect, [mImage CGImage]); 
     CGContextSetBlendMode(context, kCGBlendModeNormal); 
     CGContextSetFillColor(context, CGColorGetComponents([UIColor 
      colorWithRed:p->mColor.r green:p->mColor.g blue:p->mColor.b alpha:p->mColor.a].CGColor)); 
     CGContextFillRect(context, drawRect); 

즉, 입자 효과 방식으로 작성 사각형의 무리 호출로, 그러나 나는 단지. 첫번째 부분을 보시오. 분명하지 않은 부분이 있습니까?

답변

0

Quartz 설명서에 따르면 : "클리핑 영역은 그래픽 상태의 일부입니다. 클리핑 영역을 이전 상태로 복원하려면 다음과 같이하십시오. 클립 전에 그래픽 상태를 표시하고 잘린 도면을 완료하면 그래픽 상태를 복원 할 수 있습니다. "

S o, while 루프 내에서 코드 내에서 저장 및 복원 호출을 삽입했습니다.

CGContextSaveGState(context); 
    CGContextClipToMask(context, drawRect, [mImage CGImage]); 
    CGContextSetBlendMode(context, kCGBlendModeNormal); 
    CGContextSetFillColor(context, CGColorGetComponents([UIColor 
     colorWithRed:p->mColor.r green:p->mColor.g blue:p->mColor.b alpha:p->mColor.a].CGColor)); 
    CGContextFillRect(context, drawRect); 
    CGContextRestoreGState(context);