京贝尔开发记录

1.京贝尔数据

1.数据模型

Snip20200531_5

2.初始化加载数据

Snip20200531_7

Snip20200531_32

3.轮播

Snip20200531_1

Snip20200531_6

4.gridItem分类

4.1.获取gridItem分类数据模型.

Snip20200531_14

Snip20200531_12

Snip20200531_15

Snip20200531_17Snip20200531_19

4.2.在数据源方法,设置模型,返回三排三种cell

Snip20200531_21

4.3.gridCell.添加子控件.

Snip20200531_23

4.4.layoutSubviews

Snip20200531_25

4.5.中间grid Masonry设置约束

Snip20200531_27

4.6下边图靠上,图设小,字靠紧

Snip20200531_28

4.7.不再继承自gridCell,单独建类,不会继承到Masonry约束,非常流畅.

5.主题推荐

5.1模型数组

5.2.ViewModel

Snip20200531_31

1
2
3
[self.homeViewModel setData:^{

}];

Snip20200531_34

Snip20200531_33

6.热门好店

1.数据源

Snip20200531_35

6.2.从模型数组中取出热门 好店模型数组

Snip20200601_2

6.3.UICollectionViewDataSource

Snip20200601_3

6.4.设置inset,itemsize

Snip20200601_5

6.5.PS测量尺寸,BC,scale,计算比例.

Snip20200601_1

6.6.设置图片,需要缩放(不需要)

Snip20200601_7

Snip20200601_8

6.6.2.从缓存中找sd下的图

Snip20200601_9

Snip20200601_6

6.6.3.不需要缩放,用aspactFill,因为在总控制器设定的尺寸不对

6.7.添加locationLabel.调节约束.

6.8.设置圆角在LayoutSubviews

Snip20200601_11

Snip20200601_12

6.9.添加header

Snip20200601_15

Snip20200601_17

6.10.注册Snip20200601_19

Snip20200601_20

6.11.设置尺寸

Snip20200601_21

7.大牌甄选

7.1.type

Snip20200601_22

7.2.用type取[self.homeViewModel getDataArray:_type]

Snip20200601_23

7.3.设置type给子cell,分别取不同数据

Snip20200601_24

7.4.设置header

Snip20200601_26

7.5.设置动态颜色

Snip20200601_27

7.6.设置总尺寸和头部约束

Snip20200601_28

8.设置单例HomeViewModel,防止内存一直增加.

Snip20200601_29

Snip20200601_30

9.推荐店

1.建cell类和xib

Snip20200602_3

Snip20200602_4

Snip20200602_9

1.1.initWithFrame,loadNibNamed

Snip20200602_6

1.2.layourSubviews

Snip20200602_8

1.3.setStoreModel

Snip20200602_11

2.注册ReuserIdentifier,nibWithName, registerNib:nib forReuseIdentifier:

Snip20200602_12

3.加属性

Snip20200602_15

Snip20200602_16

4.懒加载初始化

Snip20200602_17

5.读模型的方法JSON to 模型数组

Snip20200602_19

6.模型类建模

Snip20200602_2

Snip20200602_20

7.给collect数据

Snip20200602_21

8.设置item大小

Snip20200602_22

9.调整子控件位置,添加下边线,

Snip20200602_23

10.设置navbar颜色,滑动通知改变背景色

Snip20200603_6

Snip20200603_7

11.深色监控

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// 获取当前模式
let currentMode = UITraitCollection.current.userInterfaceStyle
if (currentMode == .dark) {
print("深色模式")
} else if (currentMode == .light) {
print("浅色模式")
} else {
print("未知模式")
}

open var userInterfaceStyle: UIUserInterfaceStyle { get }

// 所有模式
public enum UIUserInterfaceStyle : Int {
// 未指明的
case unspecified
// 浅色模式
case light
// 深色模式
case dark
}

12.设置tabBar

1.中间按钮用圆角去掉黑边,需要自定义tabbar,在layouSubViews里.

Snip20200602_29

2.设置文字颜色和背景色,使用SF Symbel,作图标,可以改变颜色.

Snip20200602_34

Snip20200602_39

3.控制器属性数组

Snip20200603_2

4.用数组添加子控制器和items

Snip20200603_3

5.中间按钮添加事件

Snip20200603_4

\break

13.附近nearBy,横向跨屏滑动的效果,用的是DCPagerController做到了

1.新建控制器.

Snip20200604_1

2.修改DCPagerController,总体背景色

Snip20200604_2

3.去掉底部一条黑线

Snip20200604_4

Snip20200604_5

4.获取网络数据,URL 没有length错误.

5.标签没字,要看赋值那里是不是有问题,尤其第一个显示了最后一个,可能就是全都赋给了第一个.

6.MR_NearByViewController.m

Snip20200604_67.创建子控制器

Snip20200604_7

13.6.pagerController添加子控制器

1.旧版:四种控制器麻烦

Snip20200604_24

2.新版一个类,四个对象.少三个类,便于修改,就是一个类加了个对象.

Snip20200604_25

Snip20200604_27

3.用自己的对象

Snip20200604_29

Snip20200604_23

7.在init里建collectview

Snip20200604_8

8.CollectView数据源

Snip20200604_10

9.给Cell赋值

Snip20200604_13

Snip20200604_14

10.附近商店模型

Snip20200604_16

11.从模型数组中取出附近模型数组<-HomeViewModel

Snip20200604_18

Snip20200604_19

13.12. 四个模型数组对应四组店<-HomeViewModel 改了

Snip20200604_20

13.12.1新版控制器一个类,四个对象.少三个类,便于修改,就是一个类加了个对象.

Snip20200604_25

13.12.2.统一控制器,添加模型数组属性

Snip20200604_27

13.12.3.用自己的模型数组当数据源

Snip20200604_29

13.13.设置title,导航栏的设了不好使 <-.MR_NearByViewController.m

Snip20200604_22

13.14.设置滑页控制器颜色和模式

Snip20200604_26

13.15.更改podfile,防止自动更新pagerController

14.地图计算距离用原生CoreLocation

1.加框架

Snip20200604_9

2.遵守协议CLLocationManagerDelegate

Snip20200604_11

3.请求使用位置

Snip20200604_11

4.添加用户位置属性

Snip20200604_17

5.懒加载中开始update位置 ,改了

Snip20200604_21

6.update完就停止.delegate

7.iOS获得用户位置

8.Please note that in iOS 11 and later,

a third key has to be supplied to your info.plist: NSLocationAlwaysAndWhenInUseUsageDescription

9.Location and Maps Programming Guide

10.教程里的代码都不好使,也许只是有延迟

11.使用的是高德地图.

1.百度开发者网站:http://lbsyun.baidu.com/

2.cocoapod安装有182M,太大了,换单独的包.

3.注册app

Snip20200604_3

4.导入库

Snip20200605_1

5.距离计算在服务器端.

15.详情页

1.导航

Snip20200605_8

2.颜色

Snip20200605_9

3.修改naviCtrl

Snip20200605_11

15.4.初始化 背景色

Snip20200605_17

16.模型数据

1.MS_StoreInfo and MR_DetailModel

Snip20200605_13

Snip20200605_12

2.懒加载数据到模型

Snip20200605_18

3.传indexPath取数据.

Snip20200605_19

17.详情:MR_StoreDetailViewController.m->添加View.

Snip20200606_18

17.1.setupCollectView

Snip20200606_4

17.2.导入头文件

Snip20200606_5

17.3.定义重用ID

Snip20200606_6

17.4.创建CollectionView

Snip20200606_7

17.5UICollectionViewDataSource

Snip20200606_9

17.6.MR_ShuffleCollectionViewCell

Snip20200606_10

17.7.设置使用的cell

Snip20200606_11

17.8.MR_ShuffleCollectionViewCell.m

Snip20200606_12

17.9.设置button,圆角

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/**

* 从图片中按指定的位置大小截取图片的一部分
*
* @param image UIImage image 原始的图片
* @param rect CGRect rect 要截取的区域
*
* @return UIImage
*/

+ (UIImage *)mr_imageFromImage:(UIImage *)image inRect:(CGRect)rect{

//把像 素rect 转化为 点rect(如无转化则按原图像素取部分图片)
CGFloat scale = [UIScreen mainScreen].scale;
CGFloat x= rect.origin.x*scale,y=rect.origin.y*scale,w=rect.size.width*scale,h=rect.size.height*scale;
CGRect dianRect = CGRectMake(x, y, w, h);

//截取部分图片并生成新图片
CGImageRef sourceImageRef = [image CGImage];
CGImageRef newImageRef = CGImageCreateWithImageInRect(sourceImageRef, dianRect);
UIImage *newImage = [UIImage imageWithCGImage:newImageRef scale:[UIScreen mainScreen].scale orientation:UIImageOrientationUp];
return newImage;
}

Snip20200606_12

17.10.通知打开新控制器

Snip20200606_14

18.详情相册,MR_DetailImagesCollectionViewController

18.0.带字典参数的通知

Snip20200606_24

18.1.接受通知处理点击

Snip20200606_19

18.2.点击推出图片展示控制器

Snip20200606_20

18.3.建MR_DetailImagesCollectionViewController

Snip20200606_26

18.5 声明id

Snip20200606_27

18.6.初始化collectView

Snip20200606_29

18.7.建模型,有值的都写才行

Snip20200606_34

18.8.JSON 转模型section模型的数组

Snip20200606_35

18.9.为数据源写方法,到时按组取数组就好

Snip20200606_35

Snip20200606_38

18.10 数据源,从模型数组中取就好

Snip20200606_40

18.11 section 头

Snip20200606_41

18.12. sectionLabel,有了模型,在DetailImageVC中处理不需要这个方法了

Snip20200606_42

18.13.这里设不到text

Snip20200606_44

18.14.必须在这setter这里设text,否则不刷新 18.商品图片集end.

19.详情第一组,商店信息模

19.1.添加模型

Snip20200607_1

19.2找到了QuickType,pasteJsonAsCode,复制然后菜单里找就好

Snip20200607_4

120个Key,手动写手累坏了

19.3.在首页选中item时赋值getStoreInfoForIndexPath:(NSIndexPath *)indexPath

Snip20200607_6

Snip20200607_5

19.4.添加Views

_imageButtonImage __NSCFString * @”https://jd-img.gbei.cn/upload/storeImage/yqbXfqxVtkh.jpeg" 0x0000000282dfa850

19.5.LayoutSubviews

Snip20200609_2

Snip20200609_3

20.带下划线可放大分组标题菜单-MR_SectionMenuFooter

20.1.bolck设置属性

Snip20200610_1

Snip20200610_2

Snip20200610_1

20.2.设置进度是宽度的倍数

Snip20200610_5

21.添加滚动可停住的组菜单(可以滚动悬停)

21.1.添加属性

Snip20200610_6

21.2.懒加载悬停组菜单

Snip20200610_7

21.3.根据滚动位置设置设置组菜单显示隐藏

Snip20200610_8

22.选中按钮滚到指定的View

22.1.选中按钮滚到指定的View,选中按钮发送通知,并且带着index

Snip20200610_9

22.1.选中按钮滚到指定的View,接收通知

Snip20200610_10

22.3.选中按钮滚到指定的View,通知处理

Snip20200610_11

Snip20200617_2

22.4.选中按钮滚到指定的View,滚到指定组

Snip20200610_12

23.组菜单根据滑动选中按钮

23.1.组菜单根据滑动选中按钮,组菜单被拉下来,选中第一个

Snip20200617_1

23.2.根据滚动的位置和记录的headerY值们对比确定选中哪个按钮

Snip20200617_3

23.2(旧).组菜单根据滑动选中按钮,停止减速时设置选中哪个,这个不好使Snip20200610_14

24.首页第二三组详情

24.1.首页第二三组,详情页URL

24.2.用URL获得详情页面数据并显示

Snip20200617_9

25.首页上拉刷新

Snip20200619_3

Snip20200619_3

26.订单

26.1.MR_OrderSubMenu

26.2.MR_OrderViewController

26.3.MR_OrderSubViewController

27.个人中心颜色

28.分类颜色DCCommodityViewController

29.显示地图

29.0.定义常量

Snip20200624_2

Snip20200624_3

29.1.发通知

Snip20200624_4

29.2.按钮添加动作

Snip20200624_6

29.3.接收通知

Snip20200624_7

29.4.地图,加载控制器,传坐标

Snip20200624_9

29.5.接收坐标

Snip20200624_10

29.6.添加地图,并定位到指定位置

Snip20200624_11

29.7.自定义大头针图片

Snip20200624_12

30.地图气泡

1.Label文字 CustomAnnotationViewController

Snip20200625_1

30.2 地图气泡文字 CustomAnnotationView

Snip20200625_5

30.3.Construct custom callout.

Snip20200625_7

30.5.地图气泡设置文字和直接显示气泡

Snip20200625_10Snip20200625_13

31.跳转外部地图导航

31.1.添加白名单

Snip20200625_15

31.2.发通知

31.3.接收通知

31.4.alertVc lazy load

Snip20200625_21

31.5.建立动作菜单

31.6.显示动作菜单

Snip20200625_20

31.7.解除通知监听

31.8 调用苹果地图

Snip20200625_23

31.9 调用高德地图

Snip20200625_25

31.10 调用百度地图

Snip20200625_26

32.根据坐标获得地点名

Snip20200625_27

33.在设置模型时用高德地图计算距离MAMetersBetweenMapPoints

Snip20200626_1

34.用户位置用高德地图获得

34.1.用户位置用高德地图获得,管理者

Snip20200626_2

33.2.aMaplocationManager高德位置管理者

Snip20200626_3

34.3.隐私请求获取位置信息,和定位

Snip20200626_4

34.4.懒加载时高德地图获取位置

Snip20200626_5

34.5.高德地图获取到位置

Snip20200626_6

34.6.高德地图获取失败报错

Snip20200626_7

35.高德地理编码(地名得坐标)

35.1高德地理编码(地名得坐标) 1.API对象

35.2. protocol AMapSearchDelegate

35.3 AMapGeocodeSearchRequest created

35.4.aMapSearchApi make a request, will get a response

35.5 AMapSearchDelegate method onGeocodeSearchDone 需要滚动才能刷新,在设置model那里不用

35.6.分类增加属性,用于保存距离

35.7.分类增加属性,用于保存距离

35.8 获取StoreModel解析时地理编码并计算距离,这个需要滚动,不如在setModel时计算

36.个人中心颜色

37.个人中心正弦曲线分割

9CD7BB63-3A52-45C1-9D5D-CE17C7467E67_1_201_a

Snip20200628_2

38.监控暗黑模式切换,更换图片.traitCollectionDidChange

Snip20200628_1

39.打电话

Snip20200628_4

40.百度地图