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.
如有任何问题,也可联系我邮箱,期待你。
业精于勤荒于嬉,行成于思毁于随。加油
demo2动态加载显示商品详情页的更多相关文章
- [ActionScript 3.0] AS3.0 动态加载显示内容
可以将下列任何外部显示资源加载到 ActionScript 3.0 应用程序中: 在 ActionScript 3.0 中创作的 SWF 文件 — 此文件可以是 Sprite.MovieClip 或扩 ...
- [安卓] 9、线程、VIEW、消息实现从TCP服务器获取数据动态加载显示
一.前言: 一般情况下从TCP服务器读取数据是放在一个线程里读的,但是刷新界面又不得不放在线程外面,所以需要用消息传递把线程里从TCP里获得的数据传送出来,然后根据数据对页面进行相应的刷新. 二.业务 ...
- ecshop 商品详情页显示同类别下的推荐商品
1.打开goods.php文件找到下面代码 $smarty->assign('goods_rank', get_goods_rank($goods_id)); // 商品的销售排名 在上面的代码 ...
- ie6,7下js动态加载图片不显示错误
ie6,7下js动态加载图片不显示错误 先描述一下出现这种匪夷所思bug的背景: 我在页面加载的时候加载一堆小缩略图,<a href="javascript:void(0);" ...
- 用js原生加jquery实现下拉跳转至商品详情页,上拉回到商品简介
在做一个商城的项目时,做到商品详情页的时候需要实现这种下拉跳转到商品详情页加载许多图片,上拉回到商品简介的效果,并且需要用户在滑动时有一种费力的感觉.最初是通过iscroll插件实现的,但这个插件在使 ...
- Qt:使用Model-View,动态的加载显示数据
共有 main.cpp, Widget.h, Widget.cpp, Widget.ui, MyModel.h, MyModel.cpp 六个文件. 可从此下载整个工程文件: /Files/biao/ ...
- Ecshop商品详情页显示当前会员等级价格
会员登录状态下,在ECSHOP商品详情页的本店售价中显示当前登录会员对应的等级价格,在未登录状态下,则还默认显示原来的本店售价. 解决方法: 这个需要修改ECSHOP程序代码来实现. 打开文件 /in ...
- bootstrap模态框modal使用remote动态加载内容,第二次加载显示相同内容解决办法
bootstrap的modal中,使用remote可以动态加载页面到modal-body中,并弹窗显示 如果提供的是 URL,将利用 jQuery 的 load 方法从此 URL 地址加载要展示的内容 ...
- 在aspx页动态加载ascx页面内容,给GridView控件绑定数据
在aspx页动态加载ascx页面内容 //加载ascx页面内容Control c1 = this.Page.LoadControl("WebUserControl1.ascx"); ...
随机推荐
- 数据可视化之powerBI入门 (一)认识PowerBI
来自 https://zhuanlan.zhihu.com/p/64144024 Power BI是什么? Power BI是微软推出的数据分析和可视化工具,我们先来看看微软官方是怎么介绍的: Po ...
- python网络编程05 /TCP阻塞机制
python网络编程05 /TCP阻塞机制 目录 python网络编程05 /TCP阻塞机制 1.什么是拥塞控制 2.拥塞控制要考虑的因素 3.拥塞控制的方法: 1.慢开始和拥塞避免 2.快重传和快恢 ...
- 机器学习实战基础(三十六):随机森林 (三)之 RandomForestClassifier 之 重要属性和接口
重要属性和接口 至此,我们已经讲完了所有随机森林中的重要参数,为大家复习了一下决策树的参数,并通过n_estimators,random_state,boostrap和oob_score这四个参数帮助 ...
- 爬虫06 /scrapy框架
爬虫06 /scrapy框架 目录 爬虫06 /scrapy框架 1. scrapy概述/安装 2. 基本使用 1. 创建工程 2. 数据分析 3. 持久化存储 3. 全栈数据的爬取 4. 五大核心组 ...
- 用Python演奏音乐
目录 背景 准备 安装mingus 下载并配置fluidsynth 下载soundfont文件 分析 乐谱格式 乐谱解析 弹奏音乐 添加伴奏 保存音乐 完整程序 背景 笔者什么乐器也不会,乐理知识也只 ...
- .NET Core微服务开发网关篇-ocelot
通过上篇我们知道,网关是外部访问的统一入口,本文采用Ocelot作为Api网关. 环境要求: vs2019 .NetCore3.1 Ocelot16.0.1 创建一个产品服务Api站点(AAStore ...
- 尝鲜刚发布的 SpringFox 3.0.0,以前造的轮子可以不用了...
最近 SpringFox 3.0.0 发布了,距离上一次大版本2.9.2足足有2年多时间了.可能看到这个名字,很多读者会有点陌生.但是,只要给大家看一下这两个依赖,你就知道了! <depende ...
- 3.TCP协议
一.TCP协议特点和报文段格式 面向连接的传输层协议 每一条TCP连接只能有两个端点 TCP提供可靠交付的服务,无差错,不丢失,不重复,按序到达 全双工通信 -> 发送缓冲:准备发送的数据&am ...
- hostapd阅读(openwrt)-1
好久没有来博客园写点东西了,这段时间主要搞了openwrt系统的移植,无线的校验等相关工作,鉴于我是一个懒惰的大龄菜鸟程序员,就先自我原谅自己了,好了废话少说,直奔主题--hostapd. 由于我主要 ...
- 利用Python的装饰器一键开启多线程
记录一下自己写的烂代码 import time import threading def WithThread(obj): """这是一个开启线程的装饰器"&q ...