gpt4 book ai didi

ios - 将自定义 UIView 添加到 UIScrollview - 如何计算位置、大小和处理缩放?

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:06:09 29 4
gpt4 key购买 nike

作为 iOS 新手,我正在尝试开发 a (yet another) word game .

我有一个 UIScrollView,其中包含一个带有棋盘图像的 UIImageView

UIScrollView 可以通过双击和双指缩放来缩放:

app screenshot

UIScrollView 下,我有 7 个可拖动的 UIView,代表字母 block 。

Tile.m 中的实现使用 touchesBegantouchesMoved 处理拖动并在 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];
}
}

这种方法可行,但我有两个问题 -

app screenshot

问题 1:当我将字母 block 添加到 ScrollView 时,如何计算字母 block 的位置和大小?

iOS 是否为此目的提供了任何方便的函数,或者我是否必须手动计算这些值(如我上面的代码所示)?

问题 2: 当我缩放 ImageView (游戏板)时,放置在其上的字母不会缩放。大概是因为这个方法吧?

- (UIView*)viewForZoomingInScrollView:(UIScrollView*)scrollView
{
return _imageView;
}

如何解决这个问题?上面的方法无法返回几个对象

更新:

我有branched my app on GitHub并在 scrollViewimageView 之间插入一个 contentView(此处为 fullscreen):

Xcode screenshot

然后可以缩放图像和图 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):

Reveal app

最佳答案

对于问题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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com