如何使用UIScrollView以编程方式强制滚动?

时间:2011-10-24 03:25:23

标签: iphone ios uiscrollview uikit

我有一个水平 UIScrollview设置(意思是它不是向上和向下滚动但只向左滚动的那个)并且在应用程序启动时,我希望此滚动视图自动向左滚动然后是正确的 - 有点“展示”它滚动的能力 - 然后最后停止,然后让用户接管并用手指手动控制滚动。 一切正常 - 除了这个有载的左右演示滚动。

我没有使用Interface Builder,我正在用代码做任何事情:

//(this is in viewDidLoad:)
// Create the scrollView:
UIScrollView *photosScroll = [[UIScrollView alloc] initWithFrame: CGRectMake(0, 0, 320, 200)];
[photosScroll setContentSize: CGSizeMake(1240, 200)]; 
// Add it as a subview to the mainView
[mainView addSubview:photosScroll];


// Set the photoScroll's delegate: 
photosScroll.delegate = self;

// Create a frame to which to scroll:   
CGRect frame = CGRectMake(10, 10, 80, 150);
// Scroll to that frame:
[photosScroll scrollRectToVisible: frame animated:YES];

所以scrollView加载成功,我可以用我的手指左右滚动它 - 但它不会像我希望的那样“自动滚动”。

  • 我尝试在添加之前和之后调用scrollRectToVisible scrollView作为子视图 - 没有用。
  • 想想也许这应该 发生在loadView而不是viewDidLoad?但如果是这样,怎么样?

有什么想法吗?

1 个答案:

答案 0 :(得分:5)

有两种方法可以做到这一点:

  1. 使用scrollRectToVisible:animated:获取零X值,然后使用大的正值,然后将其设置回中间点。滚动视图作为子视图添加后可以调用该方法(可能之前也是如此,但最好是安全的)。您需要使用contentSize计算左边屏幕的X值,并了解滚动视图中各种元素的宽度。
  2. 由于你只是做一个快速动画并且会给用户控制,这可能是一个快速而又脏的动画,因此你可以使用setContentOffset:animated:强制滚动视图的内容相对移动到你当前的观点位置。将元素向右移动以进行左滚动(正X值),然后向左移动两次以进行右滚动(负X值),然后将偏移设置回零。
  3. 您不应将其中任何一项放入viewDidLoadloadView;将它们放在viewDidAppear中,这是在您的滚动视图实际绘制在屏幕上之后。您只关心用户可以看到的动画!