
提供的方法
/// 已经高亮的节点view数组 数组
@property (nonatomic,strong,readonly) NSArray <PYBasePointProgressContentView *> *selectedPointArray;
/// 所有的节点view数组
@property (nonatomic,strong,readonly) NSArray <PYBasePointProgressContentView *>* allPointViewArray;
/// 节点view的y值占self的比例
@property (nonatomic,assign) CGFloat pointViewScaleCenterY;
/// 当前的进度 赋值后 更新进度并 产生动画
@property (nonatomic,assign) CGFloat currentProgress;
/// 设置 当前进度
- (void) setCurrentProgress:(CGFloat)currentProgress andAnimation: (BOOL) isAnimation;
/// 设置当前进度 根据真实的宽度
- (void) setCurrentProgressWithWidth: (CGFloat) width andAnimation: (BOOL) animation;
/**
/// 当前的进度 赋值后 更新进度并 产生动画
@param view 进度到view的中心
@param offsetX 中心偏移多少px
*/
- (void) reloadProgressToViewCenter: (PYBasePointProgressContentView *) view andOffset: (CGFloat) offsetX;
/// 前面的进度条 的样式
@property (nonatomic,assign) PYBasePointProgressLineData frontLineStyle;
/// 背景进度条 的样式
@property (nonatomic,assign) PYBasePointProgressLineData normalLineStyle;
/// 进度动画代理
@property (nonatomic,weak) id <PYBasePointProgressProtocol> frontLineAnimationDelegate;
/// 进度条动画时长
@property (nonatomic,assign) CGFloat animationDuration;
/// 背景进度条动画时长
@property (nonatomic,assign) CGFloat bgAnimationDuration;
@property (nonatomic,strong) PYBasePointProgressContentView *currentProgressView;
/// 默认的节点view的大小
@property (nonatomic,assign) CGSize pointViewSize;
/// 节点选中的策略
@property (nonatomic,assign) PYEBasePointProgressSelectedType selectedType;
/**
节点view高亮的标准。 到达center.x + selectedCenterOffsetX 高亮
*/
@property (nonatomic,assign) CGFloat selectedCenterOffsetX;
/// 重新布局
- (void) relayoutViews;
/**
获取 allPointViewArray 点亮 pointView range
@param maxCount 最多有多少个pointView
@return 点亮的range
*/
- (NSRange) getPointViewSelectedMaxCount: (NSInteger) maxCount;
注意
layer动画代理需要特殊处理:
#import "PYBaseAnimationProxy.h"
#import <objc/runtime.h>
@implementation PYBaseAnimationProxy
- (PYBaseAnimationProxy *) initWithTarget: (id)target {
_target = target;
objc_setAssociatedObject(target, (__bridge const void *)(self), self, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
return self;
}
+ (PYBaseAnimationProxy *(^)(id))createWithTarget {
return ^(id target) {
return [[self alloc] initWithTarget:target];
};
}
- (BOOL)respondsToSelector:(SEL)aSelector{
return [self.target respondsToSelector:aSelector];
}
/**
根据Invocation 调用方法
@param invocation 消息发送的核心类
*/
- (void)forwardInvocation:(NSInvocation *)invocation{
SEL sel = invocation.selector;
if ([self.target respondsToSelector:sel]) {
[invocation invokeWithTarget:self.target];
}else{
}
}
/**
根据selector 生成方法签名,为创建NSInvocation做准备
@param sel selector 选择器
@return 方法签名
*/
- (NSMethodSignature *)methodSignatureForSelector:(SEL)sel{
if (self.target && [self.target respondsToSelector:sel]) {
return [self.target methodSignatureForSelector:sel];
} else {
return [NSObject instanceMethodSignatureForSelector:@selector(init)];
}
}
@end