प्रोग्राम को UIScrollView स्क्रॉल करें


159

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

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

जवाबों:


391

आप उद्देश्य-सी में निम्नलिखित कथनों में से किसी एक के साथ स्क्रॉल दृश्य में कुछ बिंदु तक स्क्रॉल कर सकते हैं

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

या स्विफ्ट

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

देखें गाइड " स्क्रॉल देखें सामग्री स्क्रॉल के साथ-साथ एप्पल से"

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

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


1
ठंडा। हाँ, मुझे लगता है कि setContentOffset काम करता है लेकिन वास्तव में एनिमेटेड तरीके से ऐसा होना चाहता था। 'एनिमेटेड: हाँ' ने चाल चली।
पर्वतीय

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

2
@ नीरज शुक्रिया दोस्त ... (myScrollView.contentOffset.x +320)झूठ में अहम है!
D_D

5
अगर मैं गलत हूं तो मुझे सुधारें, लेकिन UIScrollView की contentOffset:सामग्री को भी ऑफसेट करेगा, जो वांछनीय नहीं हो सकता है। केवल स्क्रॉल करने के लिए, आप उपयोग करना चाह सकते हैं scrollRectToVisible:
क्रिस

CGPointMakeस्विफ्ट की तरह सी हेल्पर कार्यों का उपयोग न करें । सीधे शब्दों में एक स्विफ्ट संरचना का निर्माण करें:CGPoint(x: 0, y: 44)
अर्नोल्ड

42

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

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

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


11

दूसरा तरीका है

scrollView.contentOffset = CGPointMake(x,y);

14
यह बिल्कुल स्वीकृत उत्तर के समान है। और CGPointहोना चाहिए CGPointMake
इवान मुलवस्की

मुझे इस तरह के सरल उत्तर पसंद हैं।
18

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

11

स्विफ्ट में एनीमेशन के साथ

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

6

मुझे आश्चर्य है कि यह विषय 9 साल पुराना है और वास्तविक सीधा जवाब यहाँ नहीं है!

आप जो खोज रहे हैं, वह है scrollRectToVisible(_:animated:)

उदाहरण:

extension SignUpView: UITextFieldDelegate {
    func textFieldDidBeginEditing(_ textField: UITextField) {
        scrollView.scrollRectToVisible(textField.frame, animated: true)
    }
}

यह वही करता है जो आपको आवश्यक है, और यह हैकी से कहीं बेहतर है contentOffset

यह विधि सामग्री दृश्य को स्क्रॉल करती है ताकि आयत द्वारा परिभाषित क्षेत्र स्क्रॉल दृश्य के अंदर दिखाई दे। यदि क्षेत्र पहले से ही दिखाई दे रहा है, तो विधि कुछ भी नहीं करती है।

प्रेषक: https://developer.apple.com/documentation/uikit/uiscrollview/1619439-scrollrectorovoice



3

स्विफ्ट 3

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


0
- (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);
         }
     }];
}

8
कृपया अपने उत्तर में कुछ पाठ जोड़ने पर विचार करें, न केवल शुद्ध कोड
user1781290
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.