转换所有子视图

Gaz*_*dge 3 iphone cocoa-touch objective-c ios

我在包含大约 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;
    }    
}
Run Code Online (Sandbox Code Playgroud)

...

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

Cos*_*que 5

由于您对所有子视图应用相同的转换,因此CALayer'ssublayerTransform属性似乎非常合适。

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

    self.layer.sublayerTransform = CATransform3DMakeAffineTransform(transform);
}
Run Code Online (Sandbox Code Playgroud)


Gaz*_*dge 3

经过对此进行一些研究后,事实证明我最初的方法是最有效的:

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

    for(UIView *view in self.subviews){
        view.transform = transform;
    }    
}
Run Code Online (Sandbox Code Playgroud)

有时我想你只能接受 iPhone 处理数据的速度是有限的这一事实。