I've done simple CALayer masks before but I think I'm getting confused on what they do. I'm trying to have a punch out effect with several (2) views.

Here's what I have so far. I'm looking to have a white square with punched out label and image (so you can see the brown background through it. Where am I going wrong? 

```
- (void)viewDidLoad
{
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor brownColor];

    self.viewToPunch = [[UIView alloc] initWithFrame:CGRectZero];
    [self.view addSubview:self.viewToPunch];
    self.viewToPunch.backgroundColor = [UIColor whiteColor];

    self.punchLabel = [[UILabel alloc] initWithFrame:CGRectZero];
    self.punchLabel.textColor = [UIColor blackColor];
    self.punchLabel.font = [UIFont boldSystemFontOfSize:20.0];
    self.punchLabel.text = @"punch";
    self.punchLabel.textAlignment = NSTextAlignmentCenter;

    self.punchImage = [[UIImageView alloc] initWithImage:[[UIImage imageNamed:@"plus"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]];
    [self.punchImage setContentMode:UIViewContentModeCenter];

    self.viewsToPunch = @[self.punchLabel,self.punchImage];

    [self punch:self.viewToPunch withUIViews:self.viewsToPunch];
}

- (void)punch:(UIView *) viewToPunch withUIViews:(NSArray *)viewsToPunch
{
    CALayer *punchMask = [CALayer layer];
    punchMask.frame = viewToPunch.frame;

    NSMutableArray *sublayers = [[NSMutableArray alloc] init];
    for (UIView *views in viewsToPunch){
        [sublayers addObject:views.layer];
    }
    punchMask.sublayers = sublayers;
    punchMask.masksToBounds = YES;

    viewToPunch.layer.mask = punchMask;
}

- (void)viewWillLayoutSubviews
{
    [super viewWillLayoutSubviews];

    self.viewToPunch.frame = CGRectMake(50, 50, 100, 100);
    self.punchLabel.frame = CGRectMake(0, 0, 100, 100);
    self.punchImage.frame = CGRectMake(0, 0, self.viewToPunch.frame.size.width, 40.);

    [self punch:self.viewToPunch withUIViews:self.viewsToPunch];
}

```

![so far](https://i.stack.imgur.com/qF8o0.png)

So not only do the frames seem to be off, it seems to be the opposite of a punch out. How do I invert the mask and fix up the frames?

Thanks a lot for any help! I put it in a method punch:withUIViews: so I can hopefully reuse it in other areas.