转换所有子视图

时间:2012-02-05 21:50:31

标签: iphone objective-c ios cocoa-touch

我在滚动视图中有一个包含大约100个子视图的UIView。子视图看起来都一样,是同一个类的实例。我有一个转换,我想应用于每个子视图。但每次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 个答案:

答案 0 :(得分:4)

由于您将相同的转化应用于所有子视图,CALayer的{​​{1}}属性似乎非常合适。

sublayerTransform

答案 1 :(得分:3)

经过一番研究后,我发现我的初始方法效率最高:

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

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

有时候我猜你只需要接受iPhone处理数据的速度有限制。

答案 2 :(得分:0)

您是否考虑过创建包含100个子视图的中间子视图? 你可以设置中间子视图的变换,你就完成了。

相关问题