প্রোগ্রামিয়ালি একটি ইউআইএসক্রোলভিউ স্ক্রোল করুন


159

আমার একটি রয়েছে UIScrollViewযার বেশ কয়েকটি মতামত রয়েছে। যখন কোনও ব্যবহারকারী তাদের আঙুলটি টান দেয়, তখন আঙুলের ঝাঁকুনির দিকের উপর নির্ভর করে ভিউটি ডান বা বামে স্ক্রোল করে। মূলত আমার কোডটি আইফোনের ফটো অ্যাপের মতোই কাজ করে। এখন, এমন কোনও উপায় আছে যা আমি প্রোগ্রামগতভাবে একই জিনিস করতে পারি যাতে আমি একটি স্লাইডশো শেষ করি যা একটি বোতামের ক্লিকের সাথে এবং প্রতিটি স্ক্রলের মধ্যে একটি কনফিগারযোগ্য বিরতি দিয়ে নিজেই চলে?

আপনি কীভাবে সত্যিই স্লাইডশোগুলি করবেন UIScrollView?

উত্তর:


391

অবজেক্টিভ-সি-তে নিম্নলিখিত বিবৃতিগুলির সাথে আপনি কোনও স্ক্রোল ভিউতে কিছু জায়গায় স্ক্রোল করতে পারেন

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

বা সুইফট

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

দেখুন গাইড " স্ক্রোল করা সামগ্রী দেখেন স্ক্রোলিং পাশাপাশি অ্যাপল থেকে"

এর সাথে স্লাইডশোগুলি করতে UIScrollView, আপনি সমস্ত চিত্রগুলি স্ক্রোল ভিউতে সাজিয়ে রাখেন , পুনরাবৃত্ত টাইমার সেট আপ করুন, তারপরে -setContentOffset:animated:টাইমার আগুন লাগলে।

তবে আরও কার্যকর পন্থা হ'ল 2 টি চিত্রের দর্শন ব্যবহার করা এবং ট্রানজিশনগুলি ব্যবহার করে বা টাইমার ফায়ার করার সময় কেবল স্থানগুলি স্যুইচ করা sw বিশদ জন্য আইফোন চিত্র স্লাইডশো দেখুন ।


1
কুল। হ্যাঁ, আমি সেট কন্টেন্ট অফসেটের কাজগুলি খুঁজে পেয়েছি তবে সত্যিই এটি অ্যানিমেটেড উপায়ে ঘটতে চেয়েছিল। 'অ্যানিমেটেড: হ্যাঁ' কৌশলটি করেছেন।
আরোহণ

3
এক্স প্যারামিটার ব্যবহারের জন্য, ইউআইএসক্রোলভিউতে (আইফোনটির জন্য আপনি কোডিং করছেন বলে ধরে নেওয়া) পরবর্তী অনুচ্ছেদে অনুভূমিকভাবে সরানোর জন্য, কেবলমাত্র উত্তরটির পরিপূরক করা (myScrollView.contentOffset.x +320)
জিওভান্নি

2
@ নীরাজ ধন্যবাদ ড্যাড ... (myScrollView.contentOffset.x +320)মিথ্যা কথাটির মূল কথা!
D_D

5
আমি ভুল হলে আমাকে সংশোধন করুন, তবে ইউআইএসক্রোলভিউ সামগ্রীগুলিও একইভাবে 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
ইভান মুলাওস্কি

আমি এই মত সহজ উত্তর পছন্দ।
ক্রেফুল

আসলে, এটি গৃহীত উত্তরের মতো নয়। গৃহীত উত্তরে অ্যানিমেটেডের একটি বিকল্প রয়েছে, যা কিছু অ্যাপ্লিকেশনগুলি হ্যাঁ হতে পারে সেট করতে পারে।
রিকস্টার


6

আমি অবাক হয়েছি যে এই বিষয়টি 9 বছরের পুরানো এবং আসল সরল উত্তর এখানে নেই!

আপনি যা খুঁজছেন তা হ'ল scrollRectToVisible(_:animated:)

উদাহরণ:

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

এটি যা করে তা হ'ল আপনার যা প্রয়োজন ঠিক তা হ্যাকির চেয়ে অনেক ভাল contentOffset

এই পদ্ধতিটি সামগ্রী ভিউ স্ক্রোল করে যাতে রেকট দ্বারা সংজ্ঞায়িত অঞ্চলটি কেবল স্ক্রোল ভিউয়ের ভিতরে দৃশ্যমান হয়। যদি অঞ্চলটি ইতিমধ্যে দৃশ্যমান হয় তবে পদ্ধতিটি কিছুই করে না।

প্রেরণ: https://developer.apple.com/docamentation/uikit/uiscrolview/1619439- স্ক্রোলেক্ট টুভিজিবল



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
অনুগ্রহ করে আপনার উত্তরে কিছু পাঠ্য যুক্ত করার বিষয়টি বিবেচনা করুন, কেবল খাঁটি কোড নয়
ব্যবহারকারী 1781290
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.