Неявная анимация при вызове removeFromSuperlayer - PullRequest
1 голос
/ 10 апреля 2011

Я хотел бы воспользоваться неявной анимацией, предоставляемой CALayer, но я не могу заставить ее работать.В моем контроллере представления я объявляю переменную экземпляра CALayer * testLayer.Я создаю экземпляр testLayer с помощью этого кода.

- (void)viewDidLoad {
    testLayer = [[CALayer alloc] init];
    testLayer.bounds = CGRectMake(0, 0, 100, 100);
    testLayer.position = CGPointMake(400, 400);
    [testLayer setBackgroundColor:[UIColor redColor].CGColor];
    testLayer.delegate = self;
    [self.view.layer addSublayer:testLayer];
    [testLayer release];
}

Затем в touchesBegan я удаляю слой с суперслоя.

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[testLayer removeFromSuperlayer];
}

Слой исчезает мгновенно, без какой-либо анимации.Как я могу включить неявную анимацию для этого CALayer?

1 Ответ

1 голос
/ 10 апреля 2011

Во-первых, testLayer был выпущен в -viewDidLoad. При повторном доступе к нему в -touchesBegan он недействителен. Этот слой, на который он ссылается, все еще существует, но он сохраняется только в массиве подслоев. Вы можете изменить код для создания автоматически выпущенного CALayer, например так:

- (void)viewDidLoad {
    testLayer = [CALayer layer];
    testLayer.bounds = CGRectMake(0, 0, 100, 100);
    testLayer.position = CGPointMake(400, 400);
    [testLayer setBackgroundColor:[UIColor redColor].CGColor];
    testLayer.delegate = self;
    [self.view.layer addSublayer:testLayer];
}

Теперь он фактически будет удален из иерархии слоев в -touchesBegan. Имейте в виду, что он также будет выпущен в -touchesBegan, потому что ничто больше не содержит ссылки на него. Вам нужно будет повторно инициализировать его или сохранить самостоятельно, прежде чем вызывать -removeFromSuperlayer.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...