7
-(IBAction)displayinfo:(id)sender
{
    sublayer = [CALayer layer];

    if (appear == NO)
    {
        appear = YES;
        sublayer.contents=(id)[UIImage imageNamed:@"infoPalette.png"].CGImage;
        sublayer.frame= CGRectMake(300,200,350,250);
        [self.view.layer addSublayer:sublayer];
    }
    else
    {
        [sublayer removeFromSuperlayer];
    }
}

This allows the layer to appear but I can't remove it or hide it upon clicking the same button.

Pradhyuman sinh
  • 3,936
  • 1
  • 23
  • 38
Rola Masrie
  • 91
  • 1
  • 1
  • 7

3 Answers3

10

Replace your existing code with this one

-(IBAction)displayinfo:(id)sender
{

    if ( appear == NO)
    {
         sublayer = [CALayer layer];
         appear = YES;
         sublayer.contents=(id)[UIImage imageNamed:@"infoPalette.png"].CGImage;
         sublayer.frame= CGRectMake(300,200,350,250);
         [self.view.layer addSublayer:sublayer];
    }
    else
    {
        [sublayer removeFromSuperlayer];
    }
}
Pradhyuman sinh
  • 3,936
  • 1
  • 23
  • 38
6

In my case where I added multiple sublayers to my background imageView, I removed all of them using

 for (int i = 0 ; i < [self.backgroundImageView.layer.sublayers count]; i++ ) {
        [[self.backgroundImageView.layer.sublayers objectAtIndex:i] removeFromSuperlayer];
    }

Note: I also iterated like this

 for (CALayer *layer in self.backgroundImageView.layer.sublayers) {
      [layer removeFromSuperlayer];
 }

but this results in BadAccess, probably the reason that I added some CAGradientLayer to backgroundImageView.Layer. (it doesn't make much sense though).

ZaEeM ZaFaR
  • 1,508
  • 17
  • 22
  • 2
    This call is quicker and easier:
    `[image.layer.sublayers makeObjectsPerformSelector:@selector(removeFromSuperlayer)];`
    – Chad Hine Nov 10 '15 at 18:45
0

You change the code to be

- (IBAction)displayinfo:(id)sender{
if (appear == NO){
    sublayer = [CALayer layer];
    appear = YES;
    sublayer.contents=(id)[UIImage imageNamed:@"infoPalette.png"].CGImage;
    sublayer.frame= CGRectMake(300,200,350,250);
    [self.view.layer addSublayer:sublayer];
}
else {
    [sublayer removeFromSuperlayer];
}}

Sorry!, repeated solution

Hani Ibrahim
  • 1,448
  • 11
  • 21