iOSは網易の簡単な頭をまねて効果を転がします。


本論文の例では、iOS仿网易スクロール効果片が示す具体的なコードを共有しています。皆さんの参考になるように、具体的な内容は以下の通りです。
網易をまねる主な思想は:
1.ボタンと線の幅を設定し、
2.必要なタイトルを着信してボタンを生成する
3.クリックする時に、オフセット量を計算して、自身をオフセットします。
4.オフセット量の設定は0以下でなく、contengsize-frameより大きくないように注意してください。
具体的なコードは以下の通りです。直接使用できます。幅を設定してから、見出し配列を転送すると自動的に調整できます。そうでないと、デフォルトの60に固定されます。
また、BtnArrとlinealbelはreadonlyに設定するのが合理的ですが、ここではまた研究を行います。この二つの属性を強制的に使わないでください。
ヘッダファイルは以下の通りです

//
// TitleScrollView.h
// @author    
//
// Created by jkc on 16/7/14.
// Copyright © 2016  cjt. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface TitleScrollView : UIScrollView

typedef void(^sectionTitleViewBlock)(NSInteger num);

@property (nonatomic, strong) NSMutableArray *BtnArr;   //       
@property (nonatomic, strong) UILabel *linelabel;    //  line
@property (nonatomic, strong) sectionTitleViewBlock clickBolck; //block  

@property (nonatomic, assign) NSInteger LineWidth;    //      
@property (nonatomic, assign) NSInteger ButtonWidth;   //     

/**
 *                
 *
 * @param array        
 */
-(void)AddArrView:(NSArray*)array;

/**
 *             
 *
 * @param index     
 */
-(void)setByIndex:(NSInteger)index;
@end

mファイルは以下の通りです

//
// TitleScrollView.m
// @author    
//
// Created by jkc on 16/7/14.
// Copyright © 2016  cjt. All rights reserved.
//

#import "TitleScrollView.h"

#define TitleBtnTag 300   //button tag 
@implementation TitleScrollView

-(instancetype)initWithFrame:(CGRect)frame
{
 if (self = [super initWithFrame:frame]) {

  //     
  [self setBackgroundColor:[UIColor whiteColor]];
  self.showsHorizontalScrollIndicator = false;
  _ButtonWidth = _LineWidth = 60;

  self.linelabel = [[UILabel alloc] initWithFrame:CGRectMake(0, self.frame.size.height-1.5, _LineWidth, 1.5)];
  [self.linelabel setBackgroundColor:TintColor];
  [self addSubview:self.linelabel];
 }
 return self;
}

-(void)AddArrView:(NSArray*)array
{
 self.BtnArr = [NSMutableArray array];
 for (int i=0; i<array.count; i++) {
  //     btn
  UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake(i*_ButtonWidth, 0, _ButtonWidth,34)];
  [btn addTarget:self action:@selector(click:) forControlEvents:UIControlEventTouchUpInside];
  btn.titleLabel.font = [UIFont systemFontOfSize:12];
  btn.titleLabel.textAlignment = NSTextAlignmentCenter;
  [btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
  [btn setTitle:array[i] forState:UIControlStateNormal];

  btn.tag = TitleBtnTag+i;

  [self addSubview:btn];
  [self.BtnArr addObject:btn];
 }
 //  button        
 [self setContentSize:CGSizeMake(array.count*_ButtonWidth, CGRectGetHeight(self.frame))];
}

-(void)click:(UIButton*)button
{
 //    btn    
 for (UIButton *btn in self.BtnArr) {
  btn.titleLabel.font = [UIFont systemFontOfSize:12];
  btn.titleLabel.textAlignment = NSTextAlignmentCenter;
  [btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
 }

 //       button  
 [button setTitleColor:[UIColor orangeColor] forState:UIControlStateNormal];

 //       ,
 CGFloat index = (button.tag-TitleBtnTag)*_ButtonWidth-(self.frame.size.width-_ButtonWidth)/2;
 index = index<0?0:index;
 index = index>self.contentSize.width-CGRectGetWidth(self.frame)?self.contentSize.width-CGRectGetWidth(self.frame):index;

 //      
 [self setContentOffset:CGPointMake(index, 0) animated:YES];
 [UIView animateWithDuration:0.3 animations:^{
  self.linelabel.frame = CGRectMake((button.tag-TitleBtnTag)*_ButtonWidth, self.frame.size.height-1, _LineWidth, 1);
 }];

 self.clickBolck(button.tag);
}

//            
-(void)setByIndex:(NSInteger)nowindex
{
 UIButton *button = self.BtnArr[nowindex];
 [self click:button];
}

@end

以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。