转换所有子视图

我有一个滚动视图中包含大约100个子视图的UIView。 子视图看起来都一样,都是同一个类的实例。 我有一个想要应用于每个子视图的转换。 但是,每次zoomScale更改都需要更改转换。

将变换应用于所有视图的最佳方式是什么? 目前我在实现layoutSubviews,获取子视图数组,并将每个子视图的转换设置为新的转换。

有没有一个最佳的方式来做到这一点?

更新:

我想改变的观点是地图上的针脚。 当我放大scrollView他们需要缩小(即使他们看起来相同的大小的用户),并保持locking在相同的位置)。

- (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]; } 

经过一番研究后发现,我最初的方法是最有效的:

 - (void)layoutSubviews { CGAffineTransform transform = CGAffineTransformMakeScale(1.0/self.zoomValue, 1.0/self.zoomValue); for(UIView *view in self.subviews){ view.transform = transform; } } 

有时候,我想你只能接受iPhone的数据处理速度有限制。

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

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

你有没有想过创build一个中间的子视图来保存你的100个子视图? 你可以设置中间子视图的变换,你就完成了。