起定义环形进度条

By admin in 理财 on 2018年10月19日

在互联网行业遭遇我们都当习惯了“只有变是永久不更换的”。初入行时,还时常为变来变去的需求以及时白做的效应感到心疼,而今天曾经能够泰然面对了。

屏幕快照 2016-03-17 下午12.30.57.png

产品之事务架构做的基本上了,这时候各种文档也应有出齐了。我连无认为文档出的越齐就象征出品做得更其好还是做的非齐就无奈开。文档齐不齐及研发测试团队的默契程度、专业背景都发涉及。但是也保险产品能够顺畅迭代,以及人员更改不会见受活带来影响,最好保持比完美的要求文档或主用例文档。

根本技术点

1.这边关键采用了贝塞尔曲线和CAShapeLayer的汇总采取
2.规定曲线的端点样式
3.确定快的起始点方向

局部集团于成品设计下以后还面临着拆分任务。即拆分功能点吃不同的成品经营进行更健全之干活。在马上点上自家觉得作用点任务的拆分,在成品就上面承诺依据技术任务的拆分来做。例如有功能点,是研发小组A来贯彻,则应配合产品经营A,功能点B由研发小组B来促成,则答应相应产品经营B。这样可以有效避免产品经理的跨研发小组沟通,以及技术部门中需要协调不畅的题材。产品功效的协调问题,在活组内解决,功能模块间的通信同耦合,在技术组内解决,泾渭分明。

因第二独环形并且包含文字描述的吧例

CircleWithTextProgressView.h 文件

#import <UIKit/UIKit.h>

@interface CircleWithTextProgressView : UIView

@property (nonatomic,assign) CGFloat percent;

@property (nonatomic,assign) CGFloat  lineWidth;

@property (strong, nonatomic) NSTimer *timer;
@end

.m文件

//
//  CircleWithTextProgressView.m
//  SHProgressView
//
//  Created by zxy on 16/3/16.
//  Copyright © 2016年 Chenshaohua. All rights reserved.
//

#import "CircleWithTextProgressView.h"
@interface CircleWithTextProgressView()
{
    CAShapeLayer *_bottomShapeLayer;
    CAShapeLayer *_upperShapeLayer;
    CGFloat _percent;
    UILabel *_percentLabel;
}
@end
@implementation CircleWithTextProgressView

- (instancetype)initWithFrame:(CGRect)frame
{
    if ((self = [super initWithFrame:frame])) {
        [self drawBottomLayer];
        [self drawUpperLayer];
        [self.layer addSublayer:_bottomShapeLayer ];

        [_bottomShapeLayer addSublayer:_upperShapeLayer];

        // 文本框
        [self drawTextLabel];
        [self addSubview:_percentLabel];
    }
    return self;
}

- (UILabel *)drawTextLabel
{
    _percentLabel               = [[UILabel alloc] init];
    CGFloat centerX             = (CGRectGetMaxX(self.frame) - CGRectGetMinX(self.frame)) / 2;
    CGFloat centerY             = (CGRectGetMaxY(self.frame) - CGRectGetMinY(self.frame)) / 2;
    CGFloat width               = self.frame.size.width / 2;
    CGFloat height              = self.frame.size.height / 2;
    _percentLabel.center        = CGPointMake(centerX, centerY);
    _percentLabel.bounds        = CGRectMake(0, 0, width, height);

    _percentLabel.font          = [UIFont boldSystemFontOfSize:40];
    _percentLabel.textAlignment = NSTextAlignmentCenter;
    _percentLabel.textColor     = [UIColor redColor];

    if (!_timer) {
        _timer = [NSTimer scheduledTimerWithTimeInterval:.1 target:self selector:@selector(percentChange) userInfo:nil repeats:YES];
    }
    return _percentLabel;
}

- (void)percentChange
{
    _percentLabel.text = [NSString stringWithFormat:@"%.0f%%",_percent * 100];
}


- (CAShapeLayer *)drawBottomLayer
{
    _bottomShapeLayer                 = [[CAShapeLayer alloc] init];
    _bottomShapeLayer.frame           = self.bounds;
    CGFloat width                     = self.bounds.size.width;

    UIBezierPath *path                = [UIBezierPath bezierPathWithArcCenter:CGPointMake((CGRectGetMaxX(self.frame) - CGRectGetMinX(self.frame)) / 2, (CGRectGetMaxY(self.frame) - CGRectGetMinY(self.frame)) / 2)  radius:width / 2 startAngle:0 endAngle:6.28 clockwise:YES];
    _bottomShapeLayer.path            = path.CGPath;

    //    _bottomShapeLayer.lineCap = kCALineCapButt;
    //    _bottomShapeLayer.lineDashPattern = [NSArray arrayWithObjects:[NSNumber numberWithInt:5],[NSNumber numberWithInt:5], nil];

    _bottomShapeLayer.lineCap     = kCALineCapSquare;

    _bottomShapeLayer.lineWidth   = 15;
    _bottomShapeLayer.strokeColor = [UIColor blackColor].CGColor;
    _bottomShapeLayer.fillColor   = [UIColor clearColor].CGColor;
    return _bottomShapeLayer;
}


- (CAShapeLayer *)drawUpperLayer
{
    _upperShapeLayer       = [[CAShapeLayer alloc] init];
    _upperShapeLayer.frame = self.bounds;
    CGFloat width          = self.bounds.size.width;

    UIBezierPath *path                = [UIBezierPath bezierPathWithArcCenter:CGPointMake((CGRectGetMaxX(self.frame) - CGRectGetMinX(self.frame)) / 2, (CGRectGetMaxY(self.frame) - CGRectGetMinY(self.frame)) / 2)
                                                                       radius:width/ 2
                                                                   startAngle:-1.57
                                                                     endAngle:4.71
                                                                    clockwise:YES];
    _upperShapeLayer.path        = path.CGPath;
    _upperShapeLayer.strokeStart = 0;
    _upperShapeLayer.strokeEnd   = 0;
    [self performSelector:@selector(shapeChange) withObject:nil afterDelay:0.3];
    _upperShapeLayer.lineWidth   = 15;

    //    _upperShapeLayer.lineCap = kCALineCapButt;
    //    _upperShapeLayer.lineDashPattern = [NSArray arrayWithObjects:[NSNumber numberWithInt:5],[NSNumber numberWithInt:5], nil];

    _upperShapeLayer.lineCap     = kCALineCapRound;

    _upperShapeLayer.strokeColor = [UIColor redColor].CGColor;
    _upperShapeLayer.fillColor   = [UIColor clearColor].CGColor;
    return _upperShapeLayer;
}

@synthesize percent = _percent;
- (CGFloat )percent
{
    return _percent;
}
- (void)setPercent:(CGFloat)percent
{
    _percent = percent;

    if (percent > 1) {
    percent  = 1;
    }else if (percent < 0){
    percent  = 0;
    }

}

- (void)shapeChange
{
    _upperShapeLayer.strokeEnd = _percent;
}

@end

项目github地址

企望大家多多指教交流:468080538

方法论一:产品满足的本质要求跟小买卖目的起码在即时,应该清楚。
首先,为何会发生一个出品受创造出来?其背后必然是发一个或多个要求,凡是未见到需要而盲目生产出来的成品都是玩流氓。因此,做产品前不举行需求分析明白是不可行的。然而,无论在其他以营利为目的的商业实体中召开产品,该产品到底应该实现该实体的生意目标,或是赚取利润,或是提高流量,没有其他生意目的的出品,也是无能为力获得在下去的理由的。

以年前张了关于CAShapeLayer方的物,所以想用它来落实以干活中比较便于并发的速度漫长。之前一直从的是有关理财之app,而在马上类产品中就格外易并发进度条来显示类型进度,显然的,系统自带的速度长达并无克满足我们的需。。。

随三段落式理论,现在应当是方法论的末尾一点,研发中之求变动和成品迭代问题的拍卖措施。

成功后底功能使下图所示:(PS:还设有有继续封装的空中)

图片 1

主页

图片 2

环形进度长条

图片 3

环形进度长+文字

图片 4

弧形进度长

图片 5

弧形进度漫长+文字

鉴于此,MVP其实是非常重大的,这意味我们要产生一个格外简单且扩展性强的事情架构,而规划来这种架构的前提又是对业务的惊人熟悉。因此,在互联网行业,尤其是互联网经济行业中,如果只要适于高速的业务转移,对于产品经营的要求,应该是对准事情理解到能够抽象的品位,所以,我们不停都应查验自己,金融到底学的怎么样?对金融的真面目有微微的亮,而不仅拘泥于”这个按钮应该加大就要扩那么?“这种UI层面的问题上。

兹所在在讲究MVP,一夜之间产品开得抑制都可以公开得称为了迅速开发,快速达标线,好同一片遮羞布!我于产品业务架构这等同步的机要实施措施是实用主义至上,先用例后功能。

面前几乎龙有人问我:“你做产品有没发什么方法论?”
当时自愣住了几秒钟,意识及骨子里自己是有方法论的,但是打没有认真总结了,也就是说,对于怎样做产品即起事,我并无变异相同模拟适用于自己(也可能受旁人有借鉴意义的)的思辨方法。既然如此,那本己当总结一下echo之出品方法论。

起零星顶同样计划一个成品的行事一般是如此:你用凭空想象出同宗物体,并要是物体就做出了。这时,你待为旁人描述是物体,描述其是做啊用底,描述她的状,质地,硬度,大小,它是免是起什么口味,摇晃一下听会发出什么动静,或者只要使劲韧性如何。描述了后,会有人(开发兄弟等)把当时桩物体制造出。也许你道在头脑中曾经想到了立即件物体的各级一个零部件,在炮制的经过被还是会起丰富多采的题目。按照自一个老友的讲话说:“尼玛举行实现之无是若哟!”如果用例不走通,功能本来也会统筹之一对一残缺。如果不幸已跻身了研发流程,那么当程序猿拿在活动不通的流水线来咨询你的时节,如果您是男生恭喜你,你还能下跪求原谅;如果您是只妹妹,你说公该怎么吧。

方法论二:产品的计划相应由用例发起,用例验证。
鉴定好了产品的需要或商业目的后(起码是时下曾经规定),应该进入产品的工作架构等。

方法论三:
没有一样劳永逸的产品架构,早期产品或时时为推翻。因此应竭尽简单。

由自身所当的互联网金融行业在过去底几乎年里似比热门,常常会听到有人说:“哎,我们小啊想做个互联网经济平台,你看怎么开一下于好?我们发出是资源非常资源。”那我就想咨询一样词了:“做互联网经济为上什么样的小买卖目的也?你想拉流量?放贷赚钱?卖理财产品赚钱?“通常问到即下,对方就沦为沉吟,或者赖皮的游说:”你帮助自己想一个吧!“

说及此地有人会疑惑,既然产品的工作架构如此繁琐,那MVP到底还存在吗?我想说,一定要有的。一个成品的功效可以省略,比如就出一个作用,满足一近似使用者的等同近乎作业目的,但此业务目的的满足,一定是一揽子的。打只假设,如果您出半点朵一长硬币,要你交出一半,你是被闹一个硬币,还是用刀子将少朵硬币都断成半两全,然后被出些许个半健全?MVP需要您吃闹一个硬币,而无是片只半完美。即“可下的最为小产品”而休是’残缺的可怜产品“。很多时光我们MVP给非出来的来由并无是咱们筹的极密切了,而是,我们拿活计划的绝好了。

骨子里作为产品经理,给庄筹划产品目标确为本职工作,但对于尚未现实需求也已先行定好解决需要的家伙的老板娘,我不得不说一样句:“臣妾做不顶啊~”要么我需要明白出啊要求,要么我欲了解发生啊生意目的,对于需要不清楚目的不明,却规定好您必用互联网经济这个家伙的商业机构,我眷恋说的是,老乔下凡也协助不了卿什么。(嘿嘿嘿,事实上这种企业还确确实实多!)

当我们当上述的老二步工作架构时,一般就是当针对产品的生命周期及未来一两只本子的迭代有基本的预估,这样以第三步时,可以使得避免产品不止迭代中的荒腔走板。如果产品以业主(或“未知力量”)的影响下,发生了关键改观,那实在可以看是研发一个新产品,而不是于时下产品达的转了。

术出身的活经理一定知道用例是啊,但其余背景的出品经营于用例可能比较陌生,但好此将用例理解为“用户故事”,即开是事情的有着人数,在这个工作受到之一言一行是啊。每个用例都发一个眼看的目的。例如投资者是工作骨干,他产生一个重要用例称为”投资“。“投资”用例中,可能连投资者的实名验证和绑卡,而“绑卡”则一般不见面称呼一个独立的用例,因为,一般的话投资者不容许只是为绑卡而绑卡,且无生一致步目的的。我们的对象,是为着追寻来富有系统相关人员以这个活之兼具目的。这个“目的”,其实正对诺着第一步之“需求”。

出品经营是互联网职业被入门门槛最低的一个岗位,但是,在互联网经济领域,它的入门门槛就无是那么低了。所以,当您做来举行去要认为自己事务能力没有啊提升的时段,我觉着问题重要出现在:你管自己之效益界定缩得太小了。而胡缩小,可能是您的不知不觉把您的攻能力圈在舒适区了,你说为?

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 mobile.365-838.com 版权所有