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)
由于您对所有子视图应用相同的转换,因此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)
经过对此进行一些研究后,事实证明我最初的方法是最有效的:
- (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 处理数据的速度是有限的这一事实。
| 归档时间: |
|
| 查看次数: |
6089 次 |
| 最近记录: |