2012-11-27 2 views
0

UIView drawRect를 재정의 할 때 주 이미지를 CGContextDrawImage으로 그립니다. 그 위에 또 다른 이미지 (다중 혼합 모드)를 그릴 필요가 있으므로 실제로 이상으로 그릴 필요가 있습니다.drawRect의 다중 CGContextRef

이 두 번째 이미지는 동적으로 생성되므로 (마스크가 필요하고 크기가 다를 수 있으므로) 미리 작성해야하므로 결국 생성해야합니다.을 사용하기 전에 두 번째 이미지를 그릴 수있는 두 번째 컨텍스트를 어떻게 얻을 수 있습니까? ? 현재 컨텍스트에서 그려지는 경우 마스크를 적용하기 전에 주 컨텍스트가 직접 그려지지 않습니다.

- (void) drawRect:(CGRect)rect { CGContextRef ctx = UIGraphicsGetCurrentContext(); CGContextDrawImage(ctx, CGRectMake(0, 0, rect.size.width, rect.size.height), [UIImage imageNamed:@"actionBg.png"].CGImage); // prevent the drawings to be flipped CGContextTranslateCTM(ctx, 0, rect.size.height); CGContextScaleCTM(ctx, 1.0, -1.0); // generate the overlay if ([self isActive] == NO && self.fullDelay != 0) { // TODO: remove fullDelay check! int segmentSize = (ACTION_SIZE/[self fullDelay]); for (int i=0; i<[self fullDelay]; i++) { float alpha = 0.9 - (([self fullDelay] * 0.1) - (i * 0.1)); [[UIColor colorWithRed:120.0/255.0 green:14.0/255.0 blue:14.0/255.0 alpha:alpha] setFill]; if (currentDelay > i) { CGRect r = CGRectMake(0, i * segmentSize, ACTION_SIZE, segmentSize); CGContextFillRect(ctx, r); } [[UIColor colorWithRed:1 green:1 blue:1 alpha:0.3] setFill]; CGRect line = CGRectMake(0, (i * segmentSize) + segmentSize - 1 , ACTION_SIZE, 1); CGContextFillRect(ctx, line); } UIImage *overlay = UIGraphicsGetImageFromCurrentImageContext(); UIImage *overlayMasked = [TDUtilities maskImage:overlay withMask:[UIImage imageNamed:@"actionMask.png"]]; } } 

다음은 지금 올바른 이미지를 포함,하지만 난 준비했습니다 이후이 모두 엉망이되지 않고, 메인 컨텍스트를 사용하여 overlayMasked. 감사합니다

감사

답변

1

당신은 UIGraphicsBeginImageContextWithOptions 또는 CGBitmapContextCreate를 사용하여 비트 맵 컨텍스트를 생성 할 수 있습니다. 비트 맵 컨텍스트에서 그림을 마친 후에는 UIGraphicsGetImageFromCurrentImageContext 또는 CGBitmapContextCreateImage을 적절히 사용하여 이미지를 가져온 다음 UIGraphicsEndImageContext 또는 CGContextRelease을 사용하여 컨텍스트를 해제 할 수 있습니다.

관련 문제