转换所有子视图
我有一个滚动视图中包含大约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的数据处理速度有限制。
由于您将相同的转换应用于所有子视图,因此CALayer
的sublayerTransform
属性似乎非常合适。
- (void)layoutSubviews { CGAffineTransform transform = CGAffineTransformMakeScale(1.0/self.zoomValue, 1.0/self.zoomValue); self.layer.sublayerTransform = CATransform3DMakeAffineTransform(transform); }
你有没有想过创build一个中间的子视图来保存你的100个子视图? 你可以设置中间子视图的变换,你就完成了。