CATransform3D 奇怪的 UIScrollView contentOffset

Posted

技术标签:

【中文标题】CATransform3D 奇怪的 UIScrollView contentOffset【英文标题】:CATransform3D weird UIScrollView contentOffset 【发布时间】:2012-03-29 10:30:31 【问题描述】:

当 UIScrollview 在 scrollViewDidScroll 委托方法中滚动时,我正在做一个很酷的 CA3DTransform。当您使用手指滚动时,它可以完美运行,因此手动滚动时一切都很完美。

但是,当我以编程方式设置滚动视图内容偏移时:

[scrollView setContentOffSet:CGPointMake(0,460) animated:YES];

它仍然调用委托方法scrollviewdidscroll,所以调用了相同的动画方法,所以我仍然看到正确的动画,但是,在动画期间和之后,视图的某些部分丢失了!我试图在所有东西上设置 layer.zPosition ,但它似乎没有帮助。应该没问题,因为手动滚动确实可以工作而不会丢失部分视图...以某种方式以编程方式调用此方法有所不同,我不知道为什么!

【问题讨论】:

发布您的 CATransform3D 代码,您的透视图或剪切平面很可能有些奇怪。或者,禁用 3D 透视图并确认视图仍然正确显示。然后,您可以将您的 3D 代码一块一块地带来,直到您确定问题为止。 我确实禁用了 3D,然后就没有问题了,所以这肯定是 3D 的问题,但只有在以编程方式滚动时。 【参考方案1】:

以这种方式发布您的问题不是很清楚,考虑到使用委托 scrollViewDidScroll,我可以手动或以编程方式打印代码。

...
UIScrollView *sv = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 10, 320, 200)];
[sv setContentSize:CGSizeMake(640, 200)];
sv.delegate = self;
[sv setContentOffset:CGPointMake(320, 0) animated:YES];
[self.view addSubview:sv];
...

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
    NSLog(@"---%@---", NSStringFromCGPoint(scrollView.contentOffset));

在这个简单的示例中,您可以看到委托确实有效。 请原谅答案很简单,但您提出的唯一问题很难为您提供帮助。

【讨论】:

【参考方案2】:

我遇到了类似的问题(在使用滚动视图进行幻灯片放映的情况下),但通过使用scrollRectToVisible:NO 解决了它(没有动画则为否),并将其包装在 UIView 动画块中,我还放了我的动画代码.

【讨论】:

以上是关于CATransform3D 奇怪的 UIScrollView contentOffset的主要内容,如果未能解决你的问题,请参考以下文章

CATransform3D

层变换矩阵(CATransform3D 等)但带有 IBDesignable?

应用 CATransform3D 后的近似矩形?

使用 CATransform3D 性能不佳

CATransform3D 特效详解

围绕所有轴的 CATransform3D