Как удалить или скрыть подслой?

-(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];
    }
}

это позволяет слою появляться, но я не могу удалить его или скрыть его при нажатии той же кнопки.

3 ответов


замените существующий код на этот

-(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];
    }
}

в моем случае, когда я добавил несколько подслоев в фоновое изображение, я удалил их все, используя

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

Примечание: я также повторял, как это

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

но это приводит к BadAccess, вероятно, по той причине, что я добавил некоторый CAGradientLayer в backgroundImageView.Слой. (это не правда).


изменить код

- (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];
}}

извините!, повторное решение