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