demo2动态加载显示商品详情页
时间:2022-04-26
本文章向大家介绍demo2动态加载显示商品详情页,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
/*
要求:实现 头像+昵称(多余7位用...)
商品图片(根据商品实际的图片的大小进行动态的展示。按照一定的比例进行展示。)
产品简介。产品简介在商品图片的下边。并跟随商品图片的大小进行动态的收缩或者是展示。
考虑:实现功能之后,是否要做占位图 进行图片的占位??!
*/
难点:动态的加载。
实现:首先创建ui 然后请求数据 最后在主线程进行赋值 并且刷新ui 即可实现。
//
// ACShowDetailVC.m
// demo2详情动态加载展开
//
// Created by Alice_ss on 2018/1/3.
// Copyright © 2018年 AC. All rights reserved.
//
#import "ACShowDetailVC.h"
#import "JAppViewTools.h"
#import "JAppUtility.h"
#import "UIViewExt.h"
#import "AFNetworking.h"
#import "UIImageView+WebCache.h"
#define SCREENW [UIScreen mainScreen].bounds.size.width
#define SCREENH [UIScreen mainScreen].bounds.size.height
@interface ACShowDetailVC (){
UIScrollView *bgScrollView;//最后边用一个scrollview比较方便
UIView *contentView;//装内容的view
UIImageView *iconIMG;
UILabel *nicknameLabel;
UIImageView *goodIMG;
UILabel *goodIntro;
}
@end
@implementation ACShowDetailVC
- (void)viewDidLoad {
[super viewDidLoad];
[self createUI];
//模拟请求数据
[self performSelector:@selector(loadDates) withObject:nil afterDelay:2.0f];
}
#pragma mark - 模拟请求数据
- (void)loadDates{
//请求完数据之后,从新绘制界面。
//假如请求到了头像 昵称 商品图 商品描述
[UIView animateWithDuration:1.0f animations:^{
//在这里刷新主界面,展示新界面,在主线程中刷新ui
dispatch_async(dispatch_get_main_queue(), ^{
[self freshUI];
});
} completion:nil];
}
#pragma mark - 请求完数据之后从新刷新ui
- (void)freshUI{
//设置内容
[iconIMG sd_setImageWithURL:[NSURL URLWithString:@"https://tva2.sinaimg.cn/crop.0.0.100.100.50/0068QiKMjw8esxxwpxcxdj302s02s3yb.jpg"] placeholderImage:[UIImage imageNamed:@"icon_default"]];
nicknameLabel.text = @"我是昵称。我的昵称是小可爱";
[goodIMG sd_setImageWithURL:[NSURL URLWithString:@"https://tva2.sinaimg.cn/crop.0.0.100.100.50/0068QiKMjw8esxxwpxcxdj302s02s3yb.jpg"] placeholderImage:[UIImage imageNamed:@"icon_default"]];
goodIntro.text = @"这个宝贝,人见人爱,花见花开。你一定会爱上她的。真的不信你看呀。我是一只宝贝详情,我是独一无二的存在。2018年一定要。。。。。。。。。。。。。。。。。。。。。。。。这个宝贝,人见人爱,花见花开。你一定会爱上她的。真的不信你看呀。我是一只宝贝详情,我是独一无二的存在。2018年一定要。。。。。。。。。。。。。。。。。。。。。。。。这个宝贝,人见人爱,花见花开。你一定会爱上她的。真的不信你看呀。我是一只宝贝详情,我是独一无二的存在。2018年一定要。。。。。。。。。。。。。。。。。。。。。。。。这个宝贝,人见人爱,花见花开。你一定会爱上她的。真的不信你看呀。我是一只宝贝详情,我是独一无二的存在。2018年一定要。。。。。。。。。。。。。。。。。。。。。。。。这个宝贝,人见人爱,花见花开。你一定会爱上她的。真的不信你看呀。我是一只宝贝详情,我是独一无二的存在。2018年一定要。。。。。。。。。。。。。。。。。。。。。。。。这个宝贝,人见人爱,花见花开。你一定会爱上她的。真的不信你看呀。我是一只宝贝详情,我是独一无二的存在。2018年一定要。。。。。。。。。。。。。。。。。。。。。。。。这个宝贝,人见人爱,花见花开。你一定会爱上她的。真的不信你看呀。我是一只宝贝详情,我是独一无二的存在。2018年一定要。。。。。。。。。。。。。。。。。。。。。。。。";
// goodIntro.text = @"这个宝贝,人见人爱";
//设置内容的位置及格式
//1.名字最多显示8个字。多余的显示...
if (nicknameLabel.text.length>8) {
nicknameLabel.text = [[nicknameLabel.text substringWithRange:NSMakeRange(0, 7)]stringByAppendingString:@"..."];
}
//2.商品图片的高度按照比例进行显示
[goodIMG sd_setImageWithURL:[NSURL URLWithString:@"https://tva2.sinaimg.cn/crop.0.0.100.100.50/0068QiKMjw8esxxwpxcxdj302s02s3yb.jpg"] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
CGFloat scorW = goodIMG.width/image.size.width;
CGFloat scroH = scorW *image.size.height;
//从新设置goodimg的高度
goodIMG.height = scroH;
goodIntro.top = CGRectGetMaxY(goodIMG.frame)+10;
goodIntro.height = [JAppUtility getTextHeightWithView:goodIntro];
contentView.height = CGRectGetMaxY(goodIntro.frame)+10;
CGFloat offY =CGRectGetMaxY(contentView.frame)-SCREENH;
NSLog(@"%f",offY);
if(offY>0){
bgScrollView.contentSize = CGSizeMake(SCREENW, SCREENH+offY+64);
}else{
bgScrollView.contentSize = CGSizeMake(SCREENW, SCREENH);
}
}];
}
#pragma mark - 界面ui
- (void)createUI{
// self.view.backgroundColor = [UIColor grayColor];
bgScrollView = [JAppViewTools getScrollView:CGRectMake(0, 64, SCREENW, SCREENH) :self];
bgScrollView.contentSize = CGSizeMake(SCREENW, SCREENH);
bgScrollView.backgroundColor = [UIColor grayColor];
[self.view addSubview:bgScrollView];
//1.大view
contentView = [JAppViewTools getView:CGRectMake(0, 0, SCREENW, 300) :[UIColor whiteColor]];
[bgScrollView addSubview:contentView];
//2.头像
iconIMG = [JAppViewTools getImageView:CGRectMake(15, 15, 44, 44) image:@"icon_default"];
[contentView addSubview:iconIMG];
//3.昵称
nicknameLabel = [JAppViewTools getLabel:CGRectMake(CGRectGetMaxX(iconIMG.frame)+10, CGRectGetMidY(iconIMG.frame)-10, SCREENW-(CGRectGetMaxX(iconIMG.frame)+10), 20) :JTextFCMake([UIFont systemFontOfSize:15], [UIColor blackColor])];
nicknameLabel.text = @"名字占位符";
[contentView addSubview:nicknameLabel];
//4.商品图
goodIMG = [JAppViewTools getImageView:CGRectMake(CGRectGetMinX(iconIMG.frame), CGRectGetMaxY(iconIMG.frame)+10, SCREENW-CGRectGetMinX(iconIMG.frame)*2, 100) image:@"icon_default"];
[contentView addSubview:goodIMG];
//5.商品简介
goodIntro = [JAppViewTools getLabel:CGRectMake(CGRectGetMinX(iconIMG.frame), CGRectGetMaxY(goodIMG.frame)+10, SCREENW-30, 30) :@"商品简介占位符" :JTextFCMake([UIFont systemFontOfSize:15], [UIColor redColor])];
[contentView addSubview:goodIntro];
contentView.height = CGRectGetMaxY(goodIntro.frame)+10;
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
/*
#pragma mark - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
}
*/
@end
喜欢的,想要demo的可以 邮箱联系我:673658917@qq.com.
如有任何问题,也可联系我邮箱,期待你。
业精于勤荒于嬉,行成于思毁于随。加油
- [编程经验] TensorFlow实现线性支持向量机SVM
- TensorFlow从0到1 - 2 - TensorFlow核心编程
- BZOJ 4318: OSU!
- 讨厌算法的程序员 5 - 合并算法
- 洛谷 P2679 子串
- [编程经验] CVPR2017论文全集下载代码脚本分享
- 讨厌算法的程序员 6 - 归并排序
- [编程经验] Tensorflow中的共享变量机制小结
- 洛谷 P1313 计算系数
- 一文搞懂浏览器自动化测试框架selenium!
- 三分钟Python充电-解压序列赋值给多个变量
- 三分钟Python充电-解压可迭代对象赋值给多个变量
- [编程经验] Pandas入门(一)
- Day3上午解题报告
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 这就是你日日夜夜想要的docker!!!---------Harbor私有仓库
- Go by Example 中文版: 写文件
- PWN:House Of Force
- Windwos10下使用VS2017搭建cocos2d-x 4.0开发环境
- JavaScript 中的函数式编程:函数,组合和柯里化
- 如何设置一个生产级别的高可用etcd集群
- NVIDIA Jetson nano可以处理4K相机吗?来验证编码性能吧(中)
- House Of Lore原理学习
- 使用 rush 进行命令并行处理
- 老生常谈 Spring Aop 日志收集与处理做的工具包,贼好用?
- Kaggle金牌得主的Python数据挖掘框架,机器学习基本流程都讲清楚了
- Go by Example 中文版: 行过滤器
- Elasticsearch重要知识点 | 选举流程详解
- 妹妹问我:Dubbo集群容错负载均衡
- 系统内核溢出提权