Изменить UICollectionViewCell субкадр - PullRequest
0 голосов
/ 25 октября 2019

У меня есть подкласс UICollectionView с несколькими подпредставлениями. Класс ячейки включает метод, который должен вызывать анимацию одного из подпредставлений в ячейке (timerView). Проблема в том, что хотя операторы NSLog () предполагают, что фрейм изменяется, ничего не происходит. Там нет никаких изменений в рамке подпредставления. Как я могу заставить кадр subView изменить?

UIView *superView = self.timerView.superview;

//Force the border view to layout so we can get the size
[superView layoutIfNeeded];

NSLog(@"%@", NSStringFromCGRect(superView.frame));


self.timerView.frame = CGRectMake(0, 0, 0, superView.frame.size.height);

NSLog(@"%@", NSStringFromCGRect(self.timerView.frame));

[UIView animateWithDuration:duration animations:^{
    self.timerView.frame = self.timerView.superview.frame;
} completion:^(BOOL finished) {
    if (completion) {
        completion();
    }
}];

1 Ответ

1 голос
/ 25 октября 2019

Ух, ответ был так прост, но мне потребовались часы, чтобы разобраться. Я извлекал ссылку на цель UICollectionViewCell в collectionView: didSelectItemAtIndexPath:, используя collectionView: cellForItemAtIndexPath:. Это означало, что ячейка, на которую ссылались, не всегда была той ячейкой, о которой я думал, из-за исключения из очереди. В конце я создал собственный обратный вызов делегата из ячейки, чтобы у меня был собственный метод didSelectItem..., который также передавал саму ячейку. Таким образом, я знал, что ячейка, к которой я обращался, всегда будет той, о которой я думал, и анимация начала работать.

Я понял это только тогда, когда у меня возникли проблемы со свойствами, которые, как я знал, сталиnil при доступе из других методов. Поэтому я понял, что новая камера снята с производства.

Спасибо за всю помощь, и извините, это было немного охоты на диких гусей.

...