作为iOS新手,我正在努力开发a (yet another) word game。
我有UIScrollView
持有UIImageView
的电路板图片。
UIScrollView
可以通过双击和捏合手势进行缩放:
在UIScrollView
下方,我有7个可拖动的UIView
代表字母图块。
Tile.m中的实施处理拖拽touchesBegan
,touchesMoved
并在touchesEnded
中发布通知。
单个视图控制器ViewController.m会观察此通知,并通过以下代码向/ 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:当我将其添加到滚动视图时,如何计算字母图块的位置和大小?
iOS是否为此提供了舒适的功能,还是我必须手动计算这些值(如上面的代码所示)?
问题2:当我缩放图像视图(游戏板)时,放在其上的字母片段不会缩放。可能是因为这种方法?
- (UIView*)viewForZoomingInScrollView:(UIScrollView*)scrollView
{
return _imageView;
}
如何解决这个问题?我不能通过上面的方法返回几个对象
更新
我有branched my app on GitHub并在contentView
和scrollView
之间插入imageView
(此处为fullscreen):
缩放图像,然后瓷砖工作,但我不能再滚动了。
我已打印出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):
答案 0 :(得分:2)
问题1:
有两个属性UIScrollView
UIScrollView* sc = [[UIScrollView alloc] init];
CGPoint pt = sc.contentOffset;
CGFloat scale = sc.zoomScale;
对于第二个问题,我建议在拖动的同时缩放letterImage,当放置在板上时,原始尺寸的scrollview会显示它很好
答案 1 :(得分:1)
问题2:使用新的contentView
作为主板和棋子的超级视图。这样,棋盘坐标中棋子的位置和大小将与应用于contentView
的缩放和平移无关。
问题1:不再存在问题1!