Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 以编程方式滚动UIScrollView_Ios_Objective C_Uiscrollview_Scroll - Fatal编程技术网

Ios 以编程方式滚动UIScrollView

Ios 以编程方式滚动UIScrollView,ios,objective-c,uiscrollview,scroll,Ios,Objective C,Uiscrollview,Scroll,我有一个UIScrollView,它有几个视图。当用户轻弹手指时,视图会根据手指轻弹的方向向右或向左滚动。基本上,我的代码的工作方式与iPhone照片应用程序类似。现在,有没有一种方法可以让我以编程的方式做同样的事情,这样我就可以通过点击按钮和在每个滚动之间设置一个可配置的暂停来完成幻灯片放映了 如何使用UIScrollView进行幻灯片放映?您可以使用Objective-C中的以下语句之一滚动到滚动视图中的某个点 [scrollView setContentOffset:CGPointMake

我有一个
UIScrollView
,它有几个视图。当用户轻弹手指时,视图会根据手指轻弹的方向向右或向左滚动。基本上,我的代码的工作方式与iPhone照片应用程序类似。现在,有没有一种方法可以让我以编程的方式做同样的事情,这样我就可以通过点击按钮和在每个滚动之间设置一个可配置的暂停来完成幻灯片放映了


如何使用
UIScrollView
进行幻灯片放映?

您可以使用Objective-C中的以下语句之一滚动到滚动视图中的某个点

[scrollView setContentOffset:CGPointMake(x, y) animated:YES];
或迅捷

scrollView.setContentOffset(CGPoint(x: x, y: y), animated: true)

要使用
UIScrollView
进行幻灯片放映,请在滚动视图中排列所有图像,设置重复计时器,然后在计时器启动时设置内容偏移:动画:

但更有效的方法是使用2个图像视图,并使用转换来交换它们,或者在计时器启动时简单地切换位置。有关详细信息,请参阅。

另一种方法是

scrollView.contentOffset = CGPointMake(x,y);

如果要控制动画的持续时间和样式,可以执行以下操作:

[UIView animateWithDuration:2.0f delay:0 options:UIViewAnimationOptionCurveLinear animations:^{
    scrollView.contentOffset = CGPointMake(x, y);
} completion:NULL];
调整持续时间(
2.0f
)和选项(
UIViewAnimationOptionCurveLinear
)以适应口味

-(void)viewDidLoad
{
[超级视图下载];
board=[[UIView alloc]initWithFrame:CGRectMake(0,0,self.view.frame.size.height,80)];
board.backgroundColor=[UIColor greenColor];
[self.view addSubview:board];
//加载视图后执行任何其他设置。
}
-(无效)ViewDidLayoutSubView
{
NSString*str=@“ABCDEFGHIJKLMNOPQRSTUVWXYZ”;
指数=1;
对于(int i=0;i20){
指数=1;
}
UIView*aView=[带标签的板视图:索引];
[自我实现:aView];
索引++;
NSLog(@“%d”,索引);
}
-(void)doAnimation:(UIView*)aView
{
[UIView动画持续时间:10延迟:0选项:UIView动画选项曲线动画:^{
aView.frame=CGRectMake(self.view.frame.size.height,15,50,50);
}
完成日期:^(BOOL isDone)
{
中频(isDone){
//干坏事
aView.frame=CGRectMake(-50,15,50,50);
}
}];
}

带Swift动画

scrollView.setContentOffset(CGPointMake(x, y), animated: true)
斯威夫特3

let point = CGPoint(x: 0, y: 200) // 200 or any value you like.
scrollView.contentOffset = point

我很惊讶这个话题已经9年了,而真正直截了当的答案却不在这里

您要查找的是
scrollRectToVisible(uxAE:动画:)

例如:

扩展注册视图:UITextFieldDelegate{
func textField didbeginediting(textField:UITextField){
scrollView.scrollRectToVisible(textField.frame,动画:true)
}
}
它所做的正是您所需要的,而且它比hacky
contentOffset

此方法滚动内容视图,以使由rect定义的区域 仅在滚动视图中可见。如果该区域已经 可见,该方法不执行任何操作


From:

这里是另一个对我来说很有效的用例

  • 用户点击按钮/单元格
  • 滚动到足以使目标视图可见的位置
  • 代码:Swift 5.3

    //假设您有一个名为“targetView”的视图
    滚动视图。滚动(到:CGPoint(x:targetview.frame.minX,y:targetview.frame.minY),动画:true)
    

    您可以猜到,如果要滚动以使目标视图的底部可见,请使用maxX和minY。

    Cool。是的,我确实发现setContentOffset可以工作,但我真的希望它以动画的方式发生动画:是的。只是补充答案,在UIScrollView中水平移动到下一个“页面”(假设您是为iPhone编码),对于x参数,使用
    (myScrollView.contentOffset.x+320)
    @niraj谢谢dude…在
    (myScrollView.contentOffset.x+320)
    是关键!如果我错了,请纠正我,但UIScrollView的
    contentOffset:
    也会抵消contentSize,这可能是不可取的。要仅滚动,您可能需要使用
    scrollRectToVisible:
    。不要在Swift中使用类似
    CGPointMake
    的C助手函数。只需直接构建一个Swift结构:
    CGPoint(x:0,y:44)
    这与公认的答案完全相同。而且
    CGPoint
    应该是
    CGPointMake
    。我喜欢像这样简单的答案。实际上,这和公认的答案不一样。所接受的答案有一个动画选项,一些应用程序可能想要设置为“是”。请考虑添加一些文本到您的答案,而不仅仅是纯代码。
    scrollView.setContentOffset(CGPoint(x: y, y: x), animated: true)
    
    [Scrollview setContentOffset:CGPointMake(x, y) animated:YES];
    
    let point = CGPoint(x: 0, y: 200) // 200 or any value you like.
    scrollView.contentOffset = point