Преобразуйте все подпредставления - PullRequest
3 голосов
/ 06 февраля 2012

У меня есть UIView в виде прокрутки, который содержит около 100 подпредставлений. Все подпредставления выглядят одинаково и являются экземплярами одного и того же класса. У меня есть преобразование, которое я хочу применить к каждому подпредставлению. Но преобразование должно меняться каждый раз, когда изменяется zoomScale.

Какой лучший способ применить преобразование ко всем представлениям? В настоящее время я реализую layoutSubviews, получая массив подпредставлений и устанавливая преобразование каждого подпредставления в новое преобразование.

Есть ли оптимальный способ сделать это?

Обновление:

Виды, которые я хочу преобразовать, - это булавки на карте. Когда я увеличиваю с помощью scrollView, их нужно уменьшить (т. Е. Они выглядят одинаково для пользователя) и остаются заблокированными в той же позиции).

- (void)layoutSubviews
{
    CGAffineTransform transform = CGAffineTransformMakeScale(1.0/self.zoomValue, 1.0/self.zoomValue);

    for(UIView *view in self.subviews){
        view.transform = transform;
    }    
}

...

- (void)scrollViewDidZoom:(UIScrollView *)scrollView
{
    self.mapMarkerContainer.zoomValue = scrollView.zoomScale;
    [self.mapMarkerContainer setNeedsLayout];
}

Ответы [ 3 ]

4 голосов
/ 06 февраля 2012

Поскольку вы применяете одно и то же преобразование к всем подпредставлениям, свойство CALayer *1003* выглядит идеально подходящим.

- (void)layoutSubviews
{
    CGAffineTransform transform = CGAffineTransformMakeScale(1.0/self.zoomValue, 1.0/self.zoomValue);

    self.layer.sublayerTransform = CATransform3DMakeAffineTransform(transform);
}
3 голосов
/ 20 февраля 2012

После небольшого исследования этого вопроса выясняется, что мой первоначальный метод наиболее эффективен:

- (void)layoutSubviews
{
    CGAffineTransform transform = CGAffineTransformMakeScale(1.0/self.zoomValue, 1.0/self.zoomValue);

    for(UIView *view in self.subviews){
        view.transform = transform;
    }    
}

Иногда я полагаю, что вам просто нужно признать, что существуют ограничения на скорость работы iPhone.обрабатывать данные.

0 голосов
/ 06 февраля 2012

Задумывались ли вы о создании промежуточного подпредставления, содержащего ваши 100 подпредставлений? Вы можете просто установить преобразование для промежуточного подпредставления, и все будет готово.

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