Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Black background in UIView?

I followed a tutorial online to draw in a subclassed UIView. The tutorial showed a UIView with a white background, I fixed this by simply changing the super's bg color. The problem is, when touches end, the background does not remain clear. I have no idea. I simply tried setting the fill color to [uicolor clearcolor]; unsuccessfully. Here is the code I am using:

@implementation CachedLIView
{
    UIBezierPath *path;
    UIImage *incrementalImage; // (1)
}

- (id)initWithCoder:(NSCoder *)aDecoder
{
    if (self = [super initWithCoder:aDecoder])
    {
        [self setMultipleTouchEnabled:NO];
        [self setBackgroundColor:[UIColor whiteColor]];
        path = [UIBezierPath bezierPath];
        [path setLineWidth:2.0];
    }
    return self;
}

- (void)drawRect:(CGRect)rect
{
    [incrementalImage drawInRect:rect]; // (3)
    [path stroke];
}


- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    CGPoint p = [touch locationInView:self];
    [path moveToPoint:p];
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    CGPoint p = [touch locationInView:self];
    [path addLineToPoint:p];
    [self setNeedsDisplay];
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event // (2)
{
    UITouch *touch = [touches anyObject];
    CGPoint p = [touch locationInView:self];
    [path addLineToPoint:p];
    [self drawBitmap]; // (3)
    [self setNeedsDisplay];
    [path removeAllPoints]; //(4)
}

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
{
    [self touchesEnded:touches withEvent:event];
}

- (void)drawBitmap // (3)
{
    UIGraphicsBeginImageContextWithOptions(self.bounds.size, NO, 0.0);
    [[UIColor blackColor] setStroke];
    if (!incrementalImage) // first draw; paint background white by ...
    {
        UIBezierPath *rectpath = [UIBezierPath bezierPathWithRect:self.bounds]; // enclosing bitmap by a rectangle defined by another UIBezierPath object
        [[UIColor clearColor] setFill];
        [rectpath fill]; // filling it with white
    }
    [incrementalImage drawAtPoint:CGPointZero];
    [path stroke];
    incrementalImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
}
like image 688
Josue Espinosa Avatar asked Oct 24 '13 02:10

Josue Espinosa


People also ask

How to set image as UIView background in Swift?

How To Set Image As UIView Background. 3.1 Add Image To The Swift Project. First, you should get a jpg or png format image. Right-click the swift project in Xcode left panel, then click Add Files to “project name” menu item in the popup menu list. Select the image in the top file explorer, and select the project name in Add to targets area.

What is the default value of background color in UIView?

var backgroundColor: UIColor? var tintColor: UIColor! var mask: UIView? var superview: UIView? var window: UIWindow? The view’s background color. Changes to this property can be animated. The default value is nil The view’s Core Animation layer used for rendering.

How to get the screen size of an image in UIView?

// The down image view's top left point y axis position. // The image name. // Create UIView and set the image as background. This function will calculate and return the screen width and height value in an array. // get screen size object. // get screen width.

What is a UIView in Android?

Views are the fundamental building blocks of your app's user interface, and the UIView class defines the behaviors that are common to all views. A view object renders content within its bounds rectangle and handles any interactions with that content.


1 Answers

Put the following in your view -(id) initWithFrame method:

self = [super initWithFrame:frame];
if (self) {

    self.backgroundColor = [UIColor clearColor];

}

return self;

That way your view subclass will have a transparent background = no black when drawing using bezier, CGContext… methods or anything else.

like image 182
Bloguintosh Avatar answered Oct 06 '22 06:10

Bloguintosh