Answers:
您可以使用Objective-C中的以下语句之一滚动到滚动视图中的某个点
[scrollView setContentOffset:CGPointMake(x, y) animated:YES];
或Swift
scrollView.setContentOffset(CGPoint(x: x, y: y), animated: true)
也请参见Apple的指南“ 滚动滚动查看内容 ”。
要使用进行幻灯片放映UIScrollView
,您可以在滚动视图中排列所有图像,设置一个重复的计时器,然后-setContentOffset:animated:
在计时器启动时。
但是更有效的方法是使用2个图像视图,并使用过渡或在计时器触发时仅切换位置来交换它们。有关详细信息,请参见iPhone图像幻灯片。
(myScrollView.contentOffset.x +320)
。
(myScrollView.contentOffset.x +320)
关键!
contentOffset:
也会补偿contentSize,这可能不是理想的。要仅滚动,您可能需要使用scrollRectToVisible:
。
CGPointMake
Swift中那样使用C helper函数。只需直接构建一个Swift结构:CGPoint(x: 0, y: 44)
我很惊讶这个话题已经有9年历史了,实际的简单答案还没有出现!
您正在寻找的是scrollRectToVisible(_:animated:)
。
例:
extension SignUpView: UITextFieldDelegate {
func textFieldDidBeginEditing(_ textField: UITextField) {
scrollView.scrollRectToVisible(textField.frame, animated: true)
}
}
它所做的正是您所需要的,并且比hacky更好 contentOffset
此方法滚动内容视图,以便由rect定义的区域仅在滚动视图内部可见。如果该区域已经可见,则该方法不执行任何操作。
来自:https : //developer.apple.com/documentation/uikit/uiscrollview/1619439-scrollrecttovisible
- (void)viewDidLoad
{
[super viewDidLoad];
board=[[UIView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.height, 80)];
board.backgroundColor=[UIColor greenColor];
[self.view addSubview:board];
// Do any additional setup after loading the view.
}
-(void)viewDidLayoutSubviews
{
NSString *str=@"ABCDEFGHIJKLMNOPQRSTUVWXYZ";
index=1;
for (int i=0; i<20; i++)
{
UILabel *lbl=[[UILabel alloc]initWithFrame:CGRectMake(-50, 15, 50, 50)];
lbl.tag=i+1;
lbl.text=[NSString stringWithFormat:@"%c",[str characterAtIndex:arc4random()%str.length]];
lbl.textColor=[UIColor darkGrayColor];
lbl.textAlignment=NSTextAlignmentCenter;
lbl.font=[UIFont systemFontOfSize:40];
lbl.layer.borderWidth=1;
lbl.layer.borderColor=[UIColor blackColor].CGColor;
[board addSubview:lbl];
}
[NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(CallAnimation) userInfo:nil repeats:YES];
NSLog(@"%d",[board subviews].count);
}
-(void)CallAnimation
{
if (index>20) {
index=1;
}
UIView *aView=[board viewWithTag:index];
[self doAnimation:aView];
index++;
NSLog(@"%d",index);
}
-(void)doAnimation:(UIView*)aView
{
[UIView animateWithDuration:10 delay:0 options:UIViewAnimationOptionCurveLinear animations:^{
aView.frame=CGRectMake(self.view.frame.size.height, 15, 50, 50);
}
completion:^(BOOL isDone)
{
if (isDone) {
//do Somthing
aView.frame=CGRectMake(-50, 15, 50, 50);
}
}];
}