我有一个 UIScrollView,其中包含从使用 CATiledLayer 的 UIView 派生的视图。本质上,在我的 ViewController 中viewDidLoad
:
_tiledView = [[TiledView alloc] initWithFrame:rect tileSize:_tileSize];
_scrollView = [[ScrollingView alloc] initWithFrame:rect];
_scrollView.contentSize = _tiledView.frame.size;
_scrollView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
_scrollView.decelerationRate = UIScrollViewDecelerationRateFast;
_scrollView.scrollEnabled = YES;
_scrollView.delegate = self;
[_scrollView addSubview:_tiledView];
最初,_tiledView 是 256x256 瓦片的 4x4 网格。我正在尝试增加_tiledView
运行时的尺寸。在构建时_tiledView
,我只是通过将图块的数量乘以它的大小来计算视图的大小。然后我设置 and 的大小_tiledView.frame
,_tiledView.bounds
例如:
CGRect frame = self.frame;
frame.origin = CGPointZero;
frame.size = CGSizeMake(tileSize.width*4, tileSize.height*4);
self.frame = frame;
self.bounds = frame;
现在,当我在界面中点击一个按钮时,我要做的第一步就是将_tiledView
右侧和底部的尺寸增加一个 256x256 瓷砖。这是我尝试的:
- (void)addTiles:(id)sender
{
CGRect rect = _tiledView.frame;
rect.size.width += _tileSize.width;
rect.size.height += _tileSize.height;
_tiledView.frame = rect;
_tiledView.bounds = rect;
CGSize size = _scrollView.contentSize;
size.width += _tileSize.width;
size.height += _tileSize.height;
_scrollView.contentSize = size;
[_scrollView setNeedsLayout];
}
但是,这并没有按预期工作。发生的情况是它_tiledView
变得更大,就好像它被放大了一样 - 虽然与开始时相同数量的图块,即 4x4。我检查了_scrollView.contentsScaleFactor
财产,它说1.0
。我认为_scrollView
在技术上没有放大内容。
我希望_tileView
在界面中保持其当前位置,但添加 9 个新图块,即右侧 4 个、底部 4 个和右下角 1 个。取而代之的是,最初的 16 块瓷砖变得更大,以填充原本可以被 25 块瓷砖填充的空间。
我错过了什么?我究竟做错了什么?任何帮助,将不胜感激。