作为 iOS 新手,我正在尝试开发 a (yet another) word game .
我有一个 UIScrollView
,其中包含一个带有棋盘图像的 UIImageView
。
UIScrollView
可以通过双击和双指缩放来缩放:
在 UIScrollView
下,我有 7 个可拖动的 UIView
,代表字母 block 。
Tile.m 中的实现使用 touchesBegan
、touchesMoved
处理拖动并在 touchesEnded
中发布通知。
单 View Controller ViewController.m观察此通知并通过以下代码向 UIScrollView
添加/从 UIScrollView
删除磁贴:
- (void) handleTileMoved:(NSNotification*)notification {
Tile* tile = (Tile*)notification.object;
if (tile.superview != _scrollView &&
CGRectIntersectsRect(tile.frame, _scrollView.frame)) {
[tile removeFromSuperview];
[_scrollView addSubview:tile];
tile.frame = CGRectMake(tile.frame.origin.x + _scrollView.contentOffset.x,
tile.frame.origin.y + _scrollView.contentOffset.y,
kTileWidth * _scrollView.zoomScale,
kTileScale * _scrollView.zoomScale);
} else if (tile.superview == _scrollView &&
!CGRectIntersectsRect(tile.frame, _scrollView.frame)) {
[tile removeFromSuperview];
[self.view addSubview:tile];
[self adjustFrames];
}
}
这种方法可行,但我有两个问题 -
问题 1:当我将字母 block 添加到 ScrollView 时,如何计算字母 block 的位置和大小?
iOS 是否为此目的提供了任何方便的函数,或者我是否必须手动计算这些值(如我上面的代码所示)?
问题 2: 当我缩放 ImageView (游戏板)时,放置在其上的字母不会缩放。大概是因为这个方法吧?
- (UIView*)viewForZoomingInScrollView:(UIScrollView*)scrollView
{
return _imageView;
}
如何解决这个问题?上面的方法无法返回几个对象
更新:
我有branched my app on GitHub并在 scrollView
和 imageView
之间插入一个 contentView
(此处为 fullscreen):
然后可以缩放图像和图 block ,但我不能再滚动了。
我已经打印出 contentSize
并且 1000x1000 似乎没问题:
-[ViewController viewDidLoad]: image {1000, 1000}
-[ViewController viewDidLayoutSubviews] contentOffset={0, 0} contentSize={1000, 1000}
tile: N 9 {2, 433} {45, 45}
tile: V 1 {47, 433} {45, 45}
tile: L 9 {92, 433} {45, 45}
tile: R 4 {137, 433} {45, 45}
tile: B 7 {182, 433} {45, 45}
tile: B 8 {227, 433} {45, 45}
tile: M 5 {272, 433} {45, 45}
-[ViewController adjustZoom]: scrollView origin={0, 0} size={320, 431} minScale=0.320000 zoomScale=0.640000 maxScale=0.640000
-[ViewController adjustZoom]: imageView origin={0, 0} size={1000, 1000}
-[ViewController adjustZoom]: contentView origin={0, 0} size={640, 640}
我已经尝试更改 _scrollView.canCancelContentTouches
和 _scrollView.translatesAutoresizingMaskIntoConstraints
。
我也曾尝试在 Interface Builder 中更改 UIImageView
的交互性复选框,但没有帮助。
我也无法通过使用 Reveal 应用程序找出问题(此处为 fullscreen):
最佳答案
对于问题1:
UIScrollView
有两个属性
UIScrollView* sc = [[UIScrollView alloc] init];
CGPoint pt = sc.contentOffset;
CGFloat scale = sc.zoomScale;
对于第二个问题,我建议在拖动时缩放 letterImage,当它被放置在板上时,使用原始大小 ScrollView 将显示它很好
关于ios - 将自定义 UIView 添加到 UIScrollview - 如何计算位置、大小和处理缩放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22310311/