2010-02-10 19 views
121

स्क्रॉल करें मेरे पास UIScrollView है जिसमें कई विचार हैं। जब कोई उपयोगकर्ता अपनी उंगली फिसलता है, तो दृश्य उंगली झटका की दिशा के आधार पर दाएं या बाएं स्क्रॉल करता है। असल में मेरा कोड आईफोन फोटो ऐप के समान काम करता है। अब, क्या कोई तरीका है कि मैं प्रोग्रामेटिक रूप से वही काम कर सकता हूं ताकि मैं एक स्लाइड शो के साथ समाप्त हो सकूं जो एक बटन के क्लिक के साथ स्वयं चलता है और प्रत्येक स्क्रॉल के बीच एक कॉन्फ़िगर करने योग्य विराम होता है?प्रोग्राम्सिक रूप से UIScrollView

आप वास्तव में UIScrollView के साथ स्लाइडशो कैसे करते हैं?

उत्तर

317

आप ऑब्जेक्टिव-सी

[scrollView scrollRectToVisible:CGRectMake(x, y, 1, 1) animated:YES]; 
// or 
[scrollView setContentOffset:CGPointMake(x, y) animated:YES]; 

या स्विफ्ट

scrollView.scrollRectToVisible(CGRect(x: x, y: y, width: 1, height: 1), animated: true) 
// or 
scrollView.setContentOffset(CGPoint(x: x, y: y), animated: true) 

guide "Scrolling the Scroll View Content" from Apple as well देखें में निम्नलिखित बयानों में से एक के साथ एक स्क्रॉल दृश्य में कुछ बात करने के लिए स्क्रॉल कर सकते हैं।

UIScrollView के साथ स्लाइडशो करने के लिए, आप स्क्रॉल व्यू में सभी छवियों को व्यवस्थित करते हैं, एक बार-बार टाइमर सेट करते हैं, फिर टाइमर आग लगने पर -setContentOffset:animated: सेट करते हैं।

लेकिन 2 छवि दृश्यों का उपयोग करने के लिए एक और अधिक कुशल दृष्टिकोण है और संक्रमण का उपयोग करके उन्हें स्वैप करें या टाइमर आग लगने पर बस स्विचिंग करें। विवरण के लिए iPhone Image slideshow देखें।

+1

कूल। हां, मुझे लगता है कि सेटकंटेंट ऑफसेट काम करता है लेकिन वास्तव में एनिमेटेड तरीके से ऐसा करना चाहता था। 'एनिमेटेड: हाँ' चाल है। – climbon

+2

एक्स पैरामीटर उपयोग '(myScrollView.contentOffset.x +320)' के लिए, UIScrollView (अगले मानते हुए कि आप आईफोन के लिए कोडिंग कर रहे हैं) में अगले "पृष्ठ" पर क्षैतिज रूप से स्थानांतरित करने के लिए उत्तर का पूरक है। – Giovanni

+2

@niraj धन्यवाद दोस्त ... '(myScrollView.contentOffset.x +320) में 'कुंजी है! –

10

एक और तरीका है

scrollView.contentOffset = CGPointMake(x,y); 
+13

यह स्वीकार्य उत्तर के समान ही है। और 'CGPoint'' CGPointMake' होना चाहिए। –

+0

मुझे इस तरह के सरल जवाब पसंद हैं। – quemeful

+0

वास्तव में, यह स्वीकृत उत्तर के समान नहीं है। स्वीकार्य उत्तर में एनिमेटेड का विकल्प होता है, जो कुछ ऐप्स यस पर सेट करना चाहते हैं। – Rickster

35

आप अवधि और एनीमेशन की शैली पर नियंत्रण चाहते हैं, तो आप क्या कर सकते हैं:

[UIView animateWithDuration:2.0f delay:0 options:UIViewAnimationOptionCurveLinear animations:^{ 
    scrollView.contentOffset = CGPointMake(x, y); 
} completion:NULL]; 

लिए अवधि (2.0f) और विकल्प (UIViewAnimationOptionCurveLinear) को समायोजित करें स्वाद!

1
- (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 *[email protected]"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); 
     } 
    }]; 
} 
+7

कृपया अपने उत्तर में कुछ टेक्स्ट जोड़ने पर विचार करें, न केवल शुद्ध कोड – user1781290

6
एनीमेशन के साथ

स्विफ्ट

में
scrollView.setContentOffset(CGPointMake(x, y), animated: true) 
1
[Scrollview setContentOffset:CGPointMake(x, y) animated:YES]; 
3

स्विफ्ट 3

let point = CGPoint(x: 0, y: 200) // 200 or any value you like. 
    scrollView.contentOffset = point 
संबंधित मुद्दे