new String(myobj)
, Если Вы хотите сериализировать целый объект представить в виде строки, используйте JSON.
Чтобы нарисовать фигуру с соблюдением альфа-маски изображения, просто добавьте одну линию перед рисованием:
CGContextClipToMask(context, self.bounds, image.CGImage);
// example usage
- (void)drawRect:(CGRect)rect {
if (isGrey) {
CGContextRef context = UIGraphicsGetCurrentContext();
// flip orientation
CGContextTranslateCTM(context, 0.0, self.bounds.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
// draw the image
CGContextDrawImage(context, self.bounds, self.image.CGImage);
// set the blend mode and draw rectangle on top of image
CGContextSetBlendMode(context, kCGBlendModeColor);
CGContextClipToMask(context, self.bounds, image.CGImage); // respect alpha mask
CGContextSetRGBFillColor(context, 0.0, 0.0, 0.0, 1.0);
CGContextFillRect(context, rect);
} else {
[self.image drawInRect:rect];
}
}
Хотя он не дает прямого ответа на ваш вопрос, вы можете получить желаемый эффект, используя режим наложения kCGBlendModeLuminosity
:
- (void)drawRect:(CGRect)rect {
CGSize imageSize = [image size];
CGContextRef c = UIGraphicsGetCurrentContext();
if (isGrey)
CGContextSetBlendMode(c, kCGBlendModeLuminosity);
CGContextScaleCTM(c, 1.0, -1.0);
CGContextDrawImage(c, CGRectMake(0.0f, 0.0f, imageSize.width, -imageSize.height), [image CGImage]);
}
Кроме того, прямоугольник, переданный в drawRect:
, является недопустимой областью, а не всей областью. Вы должны использовать границы
вместо
You could try to add a mask to the view's Core Animation layer.
CALayer *maskLayer = [CALayer layer];
[maskLayer setBounds:CGRectMake(0.0f, 0.0f, 100.0f, 100.0f)];
// Center the layer
[maskLayer setPosition:CGPointMake([self view].bounds.size.width/2,
[self view].bounds.size.height/2)];
// Set the cornerRadius to half the width/height to get a circle.
[maskLayer setCornerRadius:50.f];
[maskLayer setMasksToBounds:YES];
// Any solid color will do. Just using black here.
[maskLayer setBackgroundColor:[[UIColor blackColor] CGColor]];
// Set the mask which will only allow that which is in the
// circle show through
[[[self view] layer] setMask:maskLayer];
One other thought. Why can't you just create a b&w version of the image and swap that out depending on your flag?
Я бы выбрал простой выход и нарисовал черный круг того же размера, что и ваше круглое изображение. Наверное, не то, о чем вы просите.