吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1963|回复: 3
收起左侧

[其他原创] [ios]ios商品详情页面(连载11)

  [复制链接]
debug_cat 发表于 2021-3-27 13:22
没有效果图的博客,就没有灵魂。

Xnip2021-03-27_12-43-55.png

商品详情1.gif



商品详情页面

xcode 12.4

swift 5.3

前面我们实现加载商品列表。开始商品详情页面的简单编写。

商品页面顶部,显示多个图片的轮播图片

中间显示价格,商品名字

分类,店铺,描述信息。

目前还需要实现的是券信息显示,和复制到粘贴板中,打开淘宝。

代码编写

轮播图片

https://github.com/MQZHot/ZCycleView

使用这个工具

pod 'ZCycleView'

如何使用

//轮播图
private lazy var cycleView: ZCycleView = {
    let width = view.bounds.width
    let cycleView1 = ZCycleView()
    //cycleView1.placeholderImage = #imageLiteral(resourceName: "placeholder")
    cycleView1.scrollDirection = .horizontal
    cycleView1.delegate = self
    cycleView1.reloadItemsCount(images.count)
    //缩放比例
    cycleView1.itemZoomScale = 1
    cycleView1.itemSpacing = 0
    cycleView1.initialIndex = 1
    cycleView1.isAutomatic = false
    //        cycleView1.isInfinite = false
    cycleView1.itemSize = CGSize(width: width, height: width)
    return cycleView1
}()

需要实现代{过}{滤}理

extension GoodsDetailControllerViewController: ZCycleViewProtocol{
    func cycleViewRegisterCellClasses() -> [String : AnyClass] {
        return ["CustomCollectionViewCell": CustomCollectionViewCell.self]
    }

    func cycleViewConfigureCell(collectionView: UICollectionView, cellForItemAt indexPath: IndexPath, realIndex: Int) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CustomCollectionViewCell", for: indexPath) as! CustomCollectionViewCell
        //cell.imageView.image = images[realIndex]
        cell.setImageUrl(imageUrl: images[realIndex])
        return cell
    }
    func cycleViewConfigurePageControl(_ cycleView: ZCycleView, pageControl: ZPageControl) {
            pageControl.isHidden = false
            pageControl.currentPageIndicatorTintColor = .red
            pageControl.pageIndicatorTintColor = .green
            pageControl.frame = CGRect(x: 0, y: cycleView.bounds.height-25, width: cycleView.bounds.width, height: 25)
        }

}

其他信息的展示,按照snapkit约束,就很容易做到。

都是label的内容填充,这个依葫芦画瓢,配置好字体的大小和颜色。

最后完整的代码

//
//  GoodsDetailControllerViewController.swift
//  uitable
//
//  Created by Alice on 2021/3/27.
//

import UIKit
import SnapKit
let width = UIScreen.main.bounds.size.width
let height = UIScreen.main.bounds.size.height
//商品详情页面
class GoodsDetailControllerViewController: BaseViewController {
    //轮播图片的集合
    var images = [String]()
    var goodsData: MapData?
    //轮播图
    private lazy var cycleView: ZCycleView = {
        let width = view.bounds.width
        let cycleView1 = ZCycleView()
        //cycleView1.placeholderImage = #imageLiteral(resourceName: "placeholder")
        cycleView1.scrollDirection = .horizontal
        cycleView1.delegate = self
        cycleView1.reloadItemsCount(images.count)
        //缩放比例
        cycleView1.itemZoomScale = 1
        cycleView1.itemSpacing = 0
        cycleView1.initialIndex = 1
        cycleView1.isAutomatic = false
        //        cycleView1.isInfinite = false
        cycleView1.itemSize = CGSize(width: width, height: width)
        return cycleView1
    }()
    //最后价格
    private lazy var labPrice: UILabel = {
        let lab = UILabel()
        lab.font = lab.font.withSize(14)
        lab.textColor = ColorUtils.parser("#F35410")
        return lab
    }()
    //原价
    private lazy var labOriginalPrice: UILabel = {
        let lab = UILabel()
        lab.textColor = ColorUtils.parser("#9D9E9F")
        lab.font = lab.font.withSize(12)
        lab.textAlignment = NSTextAlignment.left

        return lab
    }()

    //商品名字
    private lazy var labGoodsName: UILabel = {
        let lab = UILabel()
        lab.numberOfLines = 3
        lab.font = UIFont.boldSystemFont(ofSize: 20)
        lab.textColor = ColorUtils.parser("#151617")
        return lab
    }()

    //标签
    private lazy var labTag: DDPaddingLabel = {
        let lab = DDPaddingLabel()
        lab.font = lab.font.withSize(14)
        //文字的颜色
        lab.textColor = ColorUtils.parser("#818181")

        lab.layer.backgroundColor = ColorUtils.parser("#F6F6F6").cgColor
        lab.layer.cornerRadius = 10
        lab.textAlignment = .center
        lab.padding.left = 6
        lab.padding.right = 6
        return lab
    }()

    //简单描述
    private lazy var labDesc: UILabel = {
        let lab = UILabel()
        lab.font = lab.font.withSize(12)
        lab.textColor = ColorUtils.parser("#818181")
        lab.numberOfLines = 2
        return lab
    }()

    private lazy var labStoreName: UILabel = {
        let lab = UILabel()
        lab.font = lab.font.withSize(12)
        lab.textColor = ColorUtils.parser("#818181")
        return lab
    }()

    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = .white
        //self.title = "详情"
        view.addSubview(cycleView)
        view.addSubview(labPrice)
        //轮播图的位置与大小
        cycleView.snp.makeConstraints {
            $0.top.equalToSuperview()
            $0.left.equalToSuperview()
            $0.right.equalToSuperview()
            $0.height.equalTo(cycleView.snp.width)
        }
        //价格位置
        labPrice.snp.makeConstraints { (make) in
            make.left.equalToSuperview().offset(12)
            make.top.equalTo(cycleView.snp.bottom).offset(10)

        }

        //优惠之后的
        if let item = goodsData {
            let coupon = item.couponAmount
            let price = (item.zkFinalPrice! as NSString).floatValue
            //取2位小数
            let finalPrice = String.init(format: "%.2f", (price - Float(coupon)))
            let priceContent = "¥\(finalPrice)"

            //高矮处理,把$和价格都放进来一起处理
            labPrice.attributedText  = AppFontUtils.formatThePrice(priceContent: priceContent, tagFontSize: UIFont.systemFont(ofSize: 14), priceFontSize:UIFont.boldSystemFont(ofSize: 20), textColor: ColorUtils.parser("#F35410"))
        }
        view.addSubview(labGoodsName)
        //商品名字
        labGoodsName.snp.makeConstraints { (make) in
            make.left.equalToSuperview().offset(12)
            make.top.equalTo(labPrice.snp.bottom).offset(10)
            make.right.equalToSuperview()
        }

        labGoodsName.text = goodsData?.title

        //原价
        view.addSubview(labOriginalPrice)
        labOriginalPrice.snp.makeConstraints { (make) in
            make.left.equalTo(labPrice.snp.right).offset(4)

            make.bottom.equalTo(labPrice.snp.bottom).offset(-3)
        }
        //处理中划线
        if let item = goodsData {
            let original = "原价:" + item.zkFinalPrice!
            //把处理中划线的值赋值
            labOriginalPrice.attributedText = AppFontUtils.strikethroughStyle(content: original)
        }
        view.addSubview(labTag)
        //标签
        labTag.snp.makeConstraints { (make) in
            make.left.equalToSuperview().offset(12)

            make.top.equalTo(labGoodsName.snp.bottom).offset(4)
        }
        labTag.text = goodsData?.levelOneCategoryName

        //简单描述
        view.addSubview(labDesc)
        labDesc.snp.makeConstraints { (make) in
            make.left.equalToSuperview().offset(12)
            make.top.equalTo(labTag.snp.bottom).offset(4)
            make.right.equalToSuperview()
        }
        if let desc = goodsData?.itemDescription {
            labDesc.text = desc
        }

        //店铺名字
        view.addSubview(labStoreName)
        labStoreName.snp.makeConstraints { (make) in
            make.left.equalToSuperview().offset(12)
            make.top.equalTo(labDesc.snp.bottom).offset(4)
        }
        if let name = goodsData?.nick {
            labStoreName.text = "\(name)>"
        }

    }

}

extension GoodsDetailControllerViewController: ZCycleViewProtocol{
    func cycleViewRegisterCellClasses() -> [String : AnyClass] {
        return ["CustomCollectionViewCell": CustomCollectionViewCell.self]
    }

    func cycleViewConfigureCell(collectionView: UICollectionView, cellForItemAt indexPath: IndexPath, realIndex: Int) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CustomCollectionViewCell", for: indexPath) as! CustomCollectionViewCell
        //cell.imageView.image = images[realIndex]
        cell.setImageUrl(imageUrl: images[realIndex])
        return cell
    }
    func cycleViewConfigurePageControl(_ cycleView: ZCycleView, pageControl: ZPageControl) {
            pageControl.isHidden = false
            pageControl.currentPageIndicatorTintColor = .red
            pageControl.pageIndicatorTintColor = .green
            pageControl.frame = CGRect(x: 0, y: cycleView.bounds.height-25, width: cycleView.bounds.width, height: 25)
        }

}

代码中都带了注释,如果你是跟着我的笔记学习的,应该很容易看懂了。

如果不理解的,也可以和我一起交流。

我是ios入门萌新。

代码:https://github.com/cat13954/IOSUiTableViewSample

免费评分

参与人数 4吾爱币 +10 热心值 +4 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
mo211683 + 1 + 1 谢谢@Thanks!
sob13600 + 1 + 1 用心讨论,共获提升!
lyl610abc + 1 + 1 前来膜拜IOS大佬

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

lyl610abc 发表于 2021-3-27 13:40
看到这位IOS大佬,我啪得一下就点进来支持了,很快啊
 楼主| debug_cat 发表于 2021-3-27 16:32
lyl610abc 发表于 2021-3-27 13:40
看到这位IOS大佬,我啪得一下就点进来支持了,很快啊

小伙子别乱来,我没闪
sob13600 发表于 2021-3-27 21:24
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 17:38

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表