1 つのクラスには、tiangle.png や circle.png などの 5 つの UIImage で構成される配列があります。
現在のクラスには、色のリストがあります。UIImage をクリックして 1 つの色をクリックすると、現在の UIImage の色を変更できます。これは、画像をマスクし、その色を設定し、古い UIImage を選択した色の新しいものに置き換えることで実現されます。
しかし、メソッドには何か問題があり、色を変更する必要があります。
- (void) changeColor: (UITapGestureRecognizer*) gestureRecognizer{
UIGraphicsBeginImageContext(test.newView.image.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGPoint loc = [gestureRecognizer locationInView:self.view];
CGContextSetFillColorWithColor(context, [[self colorOfPoint:loc]CGColor]);
CGContextTranslateCTM(context, 0, test.newView.image.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
CGRect rect = CGRectMake(test.newView.frame.origin.x,test.newView.frame.origin.x, test.newView.image.size.width,test.newView.image.size.height);
CGContextSetBlendMode(context, kCGBlendModeColorBurn);
CGContextClipToMask(context, rect, test.newView.image.CGImage);
CGContextAddRect(context, rect);
CGContextDrawPath(context, kCGPathFill);
CGImageRef imgRef = CGBitmapContextCreateImage(context);
UIImage* img = [UIImage imageWithCGImage:imgRef];
CGImageRelease(imgRef);
CGContextRelease(context);
UIGraphicsEndImageContext();
test.newView.image = img;
}
起こっている唯一のことは、クリックされた UIImage が不透明になることです。
この場合、UIImage を保持しているイメージビューは削除されません。