由于公司开发需要,需要滚动每道评测题,
并且一道评测题单项选择,按钮和文字都可点击选中
(单选比多选复杂一点,但是原理差不多)
1.当初任务紧,代码也没有优化,仅供思路参考,先放几张图
2.代码部分 :支持返回代理实现界面刷新重置(忽略代码中的网络请求和统计部分)
<span style="font-size:14px;">// Created by 刘成利 on 15/12/18.
// Copyright © 2015年 YouXianMing. All rights reserved.
//
#import "RiskEvaluationViewController.h"
#import "NSString+HexColors.h"
#import "UIFont+Fonts.h"
#import "WxHxD.h"
#import "BlackShowView.h"
#import "RiskReportViewController.h"
#import "V_2_X_Networking.h"
#import "ISMResultModel.h"
#import "MyHomeViewController.h"
#import "LoadingView.h"
#import "BlackShowView.h"
#import "UserInfomation.h"
#import "NetworkingString.h"
#import "UIButton+NormalUsedButton.h"
#import "NSNotificationCenterString.h"
@interface RiskEvaluationViewController () <UIScrollViewDelegate, NetworkingDelegate,RiskReportDelegate>
@property (nonatomic, strong) UIScrollView *scrollView; // 滚动视图
@property (nonatomic, strong) UILabel *pageChange; // 右上角页码
@property (nonatomic, assign) int pageNumber; // 页码
@property (nonatomic, assign) int XCount; // X值倍数
@property (nonatomic, assign) int btnTag; // 选项tag
@property (nonatomic, strong) UIButton *submit; // 提交按钮
@property (nonatomic, strong) NSArray* textArray1; // 测试题-------
@property (nonatomic, strong) NSArray* textArray2;
@property (nonatomic, strong) NSArray* textArray3;
@property (nonatomic, strong) NSArray* textArray4;
@property (nonatomic, strong) NSArray* textArray5;
@property (nonatomic, strong) NSMutableArray* scoreArray; // 选项分数
@property (nonatomic, strong) UIImageView *currentPiont; // 当前页圆点
@property (nonatomic, strong) V_2_X_Networking *networking;
@property (nonatomic, strong) NSString *riskLevel; // 风险结果
@property (nonatomic, strong) LoadingView *showLoadingView;
@end
@implementation RiskEvaluationViewController
- (void)setup {
[super setup];
self.titleLabel.text = @"风险测评";
self.backgroundView.backgroundColor = [@"f4f4f4" hexColor];
if (self.isRegister == YES)
{
[self.backButton removeFromSuperview];
}
// 初始化基本数据
[self foundationData];
// 创建界面
[self buildView];
}
- (void)foundationData{
// 标记
self.pageNumber = 1;
self.XCount = 0;
self.btnTag = 110; // 从110开始
// 测试题
self.textArray1 = @[@"1.您用于证券投资的大部分资金不会用作其它用途的时间段为:",@"短期——0到1年",@"中期——1到5年",@"长期——5年以上"];
self.textArray2 = [NSArray arrayWithObjects:@"2.您家庭预计进行证券投资的资金占家庭现有总资产(不含自助、自用房产及汽车等固定资产。扣除债务)的比例是:",@"10%以下",@"10%——30%",@"30%——50%",@"50%——70%",@"70%以上", nil];
self.textArray3 = [NSArray arrayWithObjects:@"3.以下投资,您会选择哪一项:\n",@"确定赢取100元",@"80%的机会赢取1,000元",@"50%的机会赢取5,000元",@"25%的机会赢取10,000元",@"5%的机会赢取100,000元", nil];
self.textArray4 = [NSArray arrayWithObjects:@"4.您认为自己能承受的最大投资损失是多少?\n",@"不能承受本金亏损",@"10%以内",@"10%——30%",@"30%——50%",@"超过50%", nil];
self.textArray5 = [NSArray arrayWithObjects:@"5.您是否设置并执行止损?\n",@"买前选定止损且执行过",@"买前未想,但实际有操作",@"仅能对部分股份进行止损",@"不止损,牢底坐穿型",@"在资金充裕的情况下,不断补充摊低成本", nil];
// 初始化分数,默认为0
self.scoreArray = [NSMutableArray array];
for (int i = 0; i <5; i++) {
[self.scoreArray addObject:@0];
}
}
- (void)buildView{
// 滚动视图
self.scrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, self.width, 330 *ScreenHeightRate)];
self.scrollView.backgroundColor = [UIColor clearColor];
[self.contentView addSubview:self.scrollView];
self.scrollView.contentSize = CGSizeMake(self.width*5, 320*ScreenHeightRate);
self.scrollView.scrollEnabled = YES;
self.scrollView.directionalLockEnabled = YES;
self.scrollView.pagingEnabled = YES;
self.scrollView.showsHorizontalScrollIndicator = NO;
self.scrollView.showsVerticalScrollIndicator = NO;
self.scrollView.delegate = self;
// 添加5个试题
[self createQustionView:self.textArray1];
[self createQustionView:self.textArray2];
[self createQustionView:self.textArray3];
[self createQustionView:self.textArray4];
[self createQustionView:self.textArray5];
// 滚动条
// 1,添加虚线
UIImageView *ScrollBar = [[UIImageView alloc]initWithFrame:CGRectMake(45*ScreenWidthRate, 340*ScreenHeightRate, self.width-90*ScreenWidthRate, 1)];
ScrollBar.image = [UIImage imageNamed:@"line_03"];
[self.contentView addSubview:ScrollBar];
// 2,添加灰色圆点
for (int i = 0;i<5 ; i++)
{
CGFloat X = (self.width-90*ScreenWidthRate)/4;
UIImageView* selectedPiont = [[UIImageView alloc]initWithFrame:CGRectMake((40*ScreenWidthRate+X*i), 335*ScreenHeightRate, 10*ScreenHeightRate, 10*ScreenHeightRate)];
selectedPiont.image = [UIImage imageNamed:@"risk05"];
selectedPiont.tag = i+1;
[self.contentView addSubview:selectedPiont];
}
// 3,添加大圆点
self.currentPiont = [[UIImageView alloc]initWithFrame:CGRectMake(39*ScreenWidthRate, 332*ScreenHeightRate, 18*ScreenHeightRate, 18*ScreenHeightRate)];
self.currentPiont.image = [UIImage imageNamed:@"risk05"];
[self.contentView addSubview:self.currentPiont];
// 提交按钮
CGRect submitframe = CGRectMake(12*ScreenWidthRate, 400*ScreenHeightRate, self.width-24*ScreenWidthRate, 40*ScreenHeightRate);
self.submit = [UIButton normalUsedButtonStyleWithFrame:submitframe
title:@"提交"
target:self action:@selector(submitAction)];
[self.contentView addSubview:self.submit];
self.submit.enabled = NO;
// 跳过按钮
if (self.isRegister == YES) {
UIButton *skip = [UIButton buttonWithType:UIButtonTypeCustom];
skip.frame = CGRectMake(self.width-(12+50)*ScreenWidthRate, 450*ScreenHeightRate, 50*ScreenWidthRate, 20*ScreenHeightRate);
skip.backgroundColor = [UIColor clearColor];
skip.titleLabel.font = [UIFont HeitiSCWithFontSize:15];
skip.contentHorizontalAlignment = UIControlContentHorizontalAlignmentRight;
/**
* 富文本
*/
NSString *originStr = @"跳过";
NSMutableAttributedString *attributedStr = [[NSMutableAttributedString alloc] initWithString: originStr];
[attributedStr addAttribute:NSUnderlineStyleAttributeName value:[NSNumber numberWithInteger:NSUnderlineStyleSingle] range:NSMakeRange(0, originStr.length)];
[attributedStr addAttribute:NSForegroundColorAttributeName value:[@"999999" hexColor] range:NSMakeRange(0, originStr.length)];
[skip setAttributedTitle:attributedStr forState:UIControlStateNormal];
[skip addTarget:self action:@selector(skipAction) forControlEvents:UIControlEventTouchUpInside];
[self.contentView addSubview:skip];
}
}
// 生成试题View
- (void)createQustionView:(NSArray *)textArray{
// 容器View
UIView *questionView = [[UIView alloc]initWithFrame:CGRectMake(self.width*self.XCount, 0, self.width, 330*ScreenHeightRate)];
questionView.backgroundColor = [UIColor clearColor];
[self.scrollView addSubview:questionView];
// 背景图片
UIImageView *questionBG = [[UIImageView alloc]initWithFrame:CGRectMake(15*ScreenWidthRate, 15*ScreenHeightRate, self.width-30*ScreenWidthRate, 300*ScreenHeightRate)];
questionBG.image = [UIImage imageNamed:@"questionBG"];
questionBG.userInteractionEnabled = YES;
[questionView addSubview:questionBG];
// 问题
UILabel *questionLabel = [[UILabel alloc]initWithFrame:CGRectMake(20*ScreenWidthRate, 15*ScreenHeightRate, self.width-(30+30)*ScreenWidthRate, 70*ScreenHeightRate)];
questionLabel.backgroundColor = [UIColor clearColor];
questionLabel.textColor = [@"333333" hexColor];
questionLabel.text = textArray[0];
questionLabel.font = [UIFont HeitiSCWithFontSize:15];
questionLabel.textAlignment = NSTextAlignmentLeft;
questionLabel.numberOfLines = 0;
[questionBG addSubview:questionLabel];
// 选项
for (int index= 1; index <textArray.count;index++){
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
btn.frame = CGRectMake(20*ScreenWidthRate, (90+(index-1)*40-2)*ScreenHeightRate, (15+4)*ScreenHeightRate, (15+4)*ScreenHeightRate);
btn.backgroundColor = [UIColor clearColor];
btn.tag = self.btnTag + index;
btn.selected = NO;
[btn setImage:[UIImage imageNamed:@"risk02"] forState:UIControlStateNormal];
[btn setImage:[UIImage imageNamed:@"risk03"] forState:UIControlStateSelected];
[btn addTarget:self action:@selector(chooseQuestion:) forControlEvents:UIControlEventTouchUpInside];
[questionBG addSubview:btn];
// 选项文字
UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(45*ScreenWidthRate, (90+(index-1)*40)*ScreenHeightRate, self.width-(30+45)*ScreenWidthRate, 15*ScreenHeightRate)];
label.backgroundColor = [UIColor clearColor];
label.textColor = [@"333333" hexColor];
label.text = textArray[index];
label.font = [UIFont HeitiSCWithFontSize:14];
label.textAlignment = NSTextAlignmentLeft;
label.numberOfLines = 1;
label.tag = self.btnTag-100 + index;
[questionBG addSubview:label];
// bug : 选项文字可以点击
UIButton *btnList = [UIButton buttonWithType:UIButtonTypeCustom];
btn.backgroundColor = [UIColor clearColor];
btnList.frame = CGRectMake(45*ScreenWidthRate, (90+(index-1)*40)*ScreenHeightRate, self.width-(30+45)*ScreenWidthRate, 15*ScreenHeightRate);
btnList.tag = self.btnTag+100 + index;
[btnList addTarget:self action:@selector(chooseQuestion:) forControlEvents:UIControlEventTouchUpInside];
[questionBG addSubview:btnList];
}
// tag从 110,120,130,140,150开始
self.btnTag = self.btnTag +10;
// view的X值倍数
self.XCount ++;
}
// 选择的题目
- (void)chooseQuestion:(UIButton *)sender{
if (sender.tag >200) {
sender.tag = sender.tag-100;
}
// 第一页 pageNumber = 1 第一页题目数量和其他页题目数量不一样
if (self.pageNumber == 1)
{
// 1,先全部设为非选中状态,字体原色
for (int i = 1; i<=3; i++) {
UIButton *btn = [self.view viewWithTag:110+i];
btn.selected = NO;
UILabel *label = [self.view viewWithTag:10+i];
label.textColor = [@"333333" hexColor];
}
// 2,再单独设置选中的按钮
UIButton *btn = [self.view viewWithTag:sender.tag];
btn.selected = YES;
UILabel *label = [self.view viewWithTag:sender.tag -100];
label.textColor = [@"3c77d6" hexColor];
// 3,传递分数
if (sender.tag == 111 ) {
[self.scoreArray replaceObjectAtIndex:0 withObject:@1];
}else if (sender.tag == 112){
[self.scoreArray replaceObjectAtIndex:0 withObject:@3];
}else if (sender.tag == 113){
[self.scoreArray replaceObjectAtIndex:0 withObject:@5];
}
}else{
/**
* 第二页到第五页 pageNumber = 2,3,4,5
*/
// 1,先全部设为非选中状态
for (int i = 1; i<=5; i++) {
UIButton *btn = [self.view viewWithTag:100+self.pageNumber*10+i];
btn.selected = NO;
UILabel *label = [self.view viewWithTag:self.pageNumber*10+i];
label.textColor = [@"333333" hexColor];
}
// 2,再单独设置选中的按钮
UIButton *btn = [self.view viewWithTag:sender.tag];
btn.selected = YES;
UILabel *label = [self.view viewWithTag:sender.tag -100];
label.textColor = [@"3c77d6" hexColor];
// 3,传递分数 : 121-100-2*10 = 1分
NSNumber *number = [NSNumber numberWithInteger:sender.tag-100-self.pageNumber*10];
[self.scoreArray replaceObjectAtIndex:self.pageNumber-1 withObject:number];
}
// 改变圆点颜色
UIImageView *point = [self.view viewWithTag:self.pageNumber];
point.image = [UIImage imageNamed:@"risk04"];
self.currentPiont.image = point.image;
[self isFinishQuestion]; // 判断题目是否答完
}
// 判断题目是否答完
- (void)isFinishQuestion{
// 判断是否答完题
int flag = 0;
for (int i = 0;i <5;i++){
if ([self.scoreArray[i] integerValue] != 0) { // 答完情况
flag ++;
}
}
if (flag == 5) {
self.submit.enabled = YES;
}else{
self.submit.enabled = NO;
}
}
/**
* 滚动视图代理
*/
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
// 计算页数 +1(从第一页开始)
NSUInteger temp = self.scrollView.contentOffset.x / self.scrollView.bounds.size.width; // 避免负数
self.pageNumber = (int)temp +1;
// 改变右上角
self.pageChange.text = [NSString stringWithFormat:@"%d-5",self.pageNumber];
// 改变大圆点的位置
CGFloat X = (self.width-90*ScreenWidthRate)/4;
[UIView animateWithDuration:0.3 animations:^{
self.currentPiont.frame = CGRectMake((39*ScreenWidthRate+X*(self.pageNumber -1)), 332*ScreenHeightRate, 18*ScreenHeightRate, 18*ScreenHeightRate);
}];
if ([self.scoreArray[self.pageNumber-1] intValue] == 0) {
self.currentPiont.image = [UIImage imageNamed:@"risk05"];
}else{
self.currentPiont.image = [UIImage imageNamed:@"risk04"];
}
}
// 提交事件
- (void)submitAction{
if (self.isRegister) {
[[RCStatHelper shareInstance] insertEvent:BUT_REGISTER_RISK_SUBMIT];
}else{
[[RCStatHelper shareInstance] insertEvent:BUT_RISK_SEND];
}
// 计算得分
/**
* S=1/3S1+2/3S25
其中S为评测总分,S1为第一题得分,S25为第二题到第五题得分汇总;
*/
int s1 = [self.scoreArray[0] intValue];
int s25 = [self.scoreArray[1] intValue]+[self.scoreArray[2] intValue]+[self.scoreArray[3] intValue]+[self.scoreArray[4] intValue];
double all = s1/3.0 +s25*2/3.0;
if (all < 7) {
// @"稳健型"; // 1稳健型 2 平衡型 3积极型
self.riskLevel = @"1";
}else if (all > 11){
//@"积极型";
self.riskLevel = @"3";
}else{
//@"平衡型";
self.riskLevel = @"2";
}
// 上传网络结果
[self launchNetworking];
RiskReportViewController *riskReportVC = [RiskReportViewController new];
riskReportVC.totalScore = all;
riskReportVC.isRegister = self.isRegister;
riskReportVC.delegate = self;
[self.navigationController pushViewController:riskReportVC animated:YES];
}
- (void)launchNetworking{
// 提交风险评测结果
self.networking = [V_2_X_Networking postMethodNetworkingWithNetworkInfomation:ServiceName(kRiskAssess)
requestDictionary:@{@"userId" : userInfomation().userId,
@"riskLevel" : self.riskLevel}
requestBodyType:[HttpBodyType type]
responseDataType:[JsonDataType type]];
// [self.networking appendJsonDictionary:@{@"userId" : @"U000002698", @"riskLevel" : self.riskLevel}];
self.networking.delegate = self;
[self.networking startRequest];
self.showLoadingView = [LoadingView loadingViewStartLoadingInContentView:self.loadingView];
}
#pragma mark 网络代理
- (void)requestSucess:(Networking *)networking data:(id)data {
[self.showLoadingView stopLoading];
ISMResultModel *result = [[ISMResultModel alloc] initWithDictionary:data];
if (result.isSucceed) {
NSLog(@"风险评估上传成功!");
// [self.navigationController dismissViewControllerAnimated:YES completion:^{
//
// }];
//
// [self refreshMyHomeViewController];
}else {
NSLog(@"风险评估上传失败!");
[BlackShowView alertViewShowInContentView:self.loadingView message:result.errorInfo];
}
}
- (void)requestFailed:(Networking *)networking error:(NSError *)error {
NSLog(@"风险评估%@",error);
// 提示已发送
[self.showLoadingView stopLoading];
[BlackShowView alertViewShowInContentView:self.loadingView message:networkErrorString];
}
- (void)refreshMyHomeViewController {
for (int i = 0; i < self.navigationController.viewControllers.count; i++) {
UIViewController *cv = self.navigationController.viewControllers[i];
if ([cv isKindOfClass:[MyHomeViewController class]]) {
MyHomeViewController *myHomeVC = (MyHomeViewController *)cv;
[myHomeVC networkingToGetNetData];
}
}
}
// 跳过事件
- (void)skipAction {
[[RCStatHelper shareInstance] insertEvent:BUT_REGISTER_RISK_JUMP];
[[NSNotificationCenter defaultCenter] postNotificationName:MyHomeViewControllerNetworkingToGetNetDataNotification object:nil];
[self.navigationController dismissViewControllerAnimated:YES completion:^{
}];
}
// 导航栏右侧——页码
- (void)buildTitleView {
[super buildTitleView];
self.pageChange = [[UILabel alloc]initWithFrame:CGRectMake(self.width-12-40, 35, 40, 20)];
self.pageChange.backgroundColor = [UIColor clearColor];
self.pageChange.textColor = [@"ffffff" hexColor];
self.pageChange.text = @"1-5";
self.pageChange.font = [UIFont HeitiSCWithFontSize:13];
self.pageChange.textAlignment = NSTextAlignmentRight;
self.pageChange.numberOfLines = 1;
[self.titleView addSubview:self.pageChange];
}
#pragma mark - view.
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
if(self.isRegister){
[[RCStatHelper shareInstance] startPage:PAGE_REGISTER_RISK];
}else{
[[RCStatHelper shareInstance] startPage:PAGE_RISK];
}
self.enableInteractivePopGestureRecognizer = NO;
}
- (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
if(self.isRegister){
[[RCStatHelper shareInstance] endPage:PAGE_REGISTER_RISK];
}else{
[[RCStatHelper shareInstance] endPage:PAGE_RISK];
}
self.enableInteractivePopGestureRecognizer = YES;
}
// 重测刷新 delegate方法
- (void)refreshRiskEvaluate{
// [self.contentView setNeedsLayout];
[self.scrollView removeFromSuperview];
[self.submit removeFromSuperview];
[self.currentPiont removeFromSuperview];
// 清除滚动点小灰点
for (int i = 0;i<5 ; i++)
{
UIImageView *point = [self.view viewWithTag:i+1];
[point removeFromSuperview];
}
self.pageChange.text = @"1-5";
// 初始化基本数据
[self foundationData];
// 创建界面
[self buildView];
}
@end
</span>