프로그래밍 방식으로 UIScrollView 스크롤
나는 있습니다UIScrollView
여러 뷰가 있습니다.사용자가 손가락을 깜박이면 보기가 손가락 깜박임 방향에 따라 오른쪽 또는 왼쪽으로 스크롤됩니다.기본적으로 제 코드는 아이폰 사진 앱과 유사한 방식으로 작동합니다.같은 작업을 프로그래밍 방식으로 수행하여 각 스크롤 간에 버튼을 클릭하고 구성 가능한 일시 중지로 실행되는 슬라이드 쇼를 만들 수 있는 방법이 있습니까?
슬라이드 쇼를 어떻게 정말로UIScrollView
?
목표-C에서 다음 문 중 하나를 사용하여 스크롤 뷰의 특정 지점으로 스크롤할 수 있습니다.
[scrollView setContentOffset:CGPointMake(x, y) animated:YES];
또는 스위프트
scrollView.setContentOffset(CGPoint(x: x, y: y), animated: true)
Apple의 "Scrolling the Scroll View Content" 가이드도 참조하십시오.
슬라이드 쇼를 실행하는 방법UIScrollView
스크롤 보기에서 모든 영상을 정렬하고 반복 타이머를 설정한 다음-setContentOffset:animated:
타이머가 울릴 때.
그러나 더 효율적인 방법은 2개의 이미지 보기를 사용하고 전환을 사용하거나 타이머가 작동할 때 단순히 위치를 전환하는 것입니다.자세한 내용은 iPhone 이미지 슬라이드 쇼를 참조하십시오.
애니메이션의 지속 시간과 스타일을 제어하려면 다음을 수행할 수 있습니다.
[UIView animateWithDuration:2.0f delay:0 options:UIViewAnimationOptionCurveLinear animations:^{
scrollView.contentOffset = CGPointMake(x, y);
} completion:NULL];
지속 시간 조정(2.0f
) 및 옵션(UIViewAnimationOptionCurveLinear
) 맛을 보다!
저는 이 주제가 9살이고 실제 간단한 답이 없다는 것이 놀랍습니다!
당신이 찾고 있는 것은scrollRectToVisible(_:animated:)
.
예:
extension SignUpView: UITextFieldDelegate {
func textFieldDidBeginEditing(_ textField: UITextField) {
scrollView.scrollRectToVisible(textField.frame, animated: true)
}
}
그게 정확히 당신이 필요로 하는 것이고, 그것은 해킹보다 훨씬 낫습니다.contentOffset
이 방법은 내용 보기를 스크롤하여 rect로 정의된 영역을 스크롤 보기 내에서 볼 수 있도록 합니다.영역이 이미 표시된 경우 메서드는 아무 작업도 수행하지 않습니다.
보낸 사람: https://developer.apple.com/documentation/uikit/uiscrollview/1619439-scrollrecttovisible
또 다른 방법은
scrollView.contentOffset = CGPointMake(x,y);
스위프트에 애니메이션 포함
scrollView.setContentOffset(CGPointMake(x, y), animated: true)
스위프트 3
let point = CGPoint(x: 0, y: 200) // 200 or any value you like.
scrollView.contentOffset = point
scrollView.setContentOffset(CGPoint(x: y, y: x), animated: true)
[Scrollview setContentOffset:CGPointMake(x, y) animated:YES];
- (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);
}
}];
}
여기 저에게 잘 맞는 또 다른 사용 사례가 있습니다.
- 사용자가 버튼/셀을 누릅니다.
- 대상 보기를 볼 수 있을 정도의 위치로 스크롤합니다.
코드: 스위프트 5.3
// Assuming you have a view named "targeView"
scrollView.scroll(to: CGPoint(x:targeView.frame.minX, y:targeView.frame.minY), animated: true)
스크롤하여 대상 보기의 맨 아래 부분을 표시하려면 maxX와 minY를 사용해야 합니다.
언급URL : https://stackoverflow.com/questions/2234875/programmatically-scroll-a-uiscrollview
'programing' 카테고리의 다른 글
ASP.NET Core에서 내 사이트의 기본 URL을 어떻게 얻을 수 있습니까? (0) | 2023.06.13 |
---|---|
TokenRefresh()에서 호출할 Firebase FCM 힘 (0) | 2023.06.08 |
.NET 해시 테이블 대 사전 - 사전이 그렇게 빠를 수 있습니까? (0) | 2023.06.08 |
활성 레코드로 마지막 N개의 레코드를 얻는 방법은 무엇입니까? (0) | 2023.06.08 |
Excel to PHP 배열, 가능하며 어떻게 됩니까? (0) | 2023.06.08 |