iOS 组件化

2019-05-15  本文已影响0人  p_peng

组件化 VS 模块化

网上有很对对于这两个概念的解释,这里我简单总结下自己对这两个概念的理解:

这篇文章先介绍一下组件化的开发方法,之前写过一篇文章《iOS高德地图添加自定义瓦片地图》,本篇就记录下把这个功能做成一个Pod组件的过程。

组件改造

前面一篇文章中的地图组件已经基本可以使用了,但是实现方法不方便扩展,所以首先要修改该地图组件。

在头文件中增加添加瓦片地图方法,瓦片地图需要URL构造器,zoom的最大和最小值,还有显示范围

#import <MAMapKit/MAMapKit.h>

NS_ASSUME_NONNULL_BEGIN

// URL 构造器
typedef NSURL *_Nullable(^TileOverlayUrlBuilder)(MATileOverlayPath path);

@interface PPGMapView : MAMapView

- (void)addTileOverLayWithBuilder:(TileOverlayUrlBuilder)builder;

- (void)addTileOverLayWithBuilder:(TileOverlayUrlBuilder)builder minimumZ:(NSInteger)minimumZ maximumZ:(NSInteger)maximumZ;

- (void)addTileOverLayWithBuilder:(TileOverlayUrlBuilder)builder minimumZ:(NSInteger)minimumZ maximumZ:(NSInteger)maximumZ boundingMapRect:(MAMapRect)boundingMapRect;

@end

NS_ASSUME_NONNULL_END

实现文件中增加对应的三个方法

- (void)addTileOverLayWithBuilder:(TileOverlayUrlBuilder)builder {
    // 默认最小12,最大20级
    [self addTileOverLayWithBuilder:builder minimumZ:12 maximumZ:20 boundingMapRect:MAMapRectWorld];
}

- (void)addTileOverLayWithBuilder:(TileOverlayUrlBuilder)builder minimumZ:(NSInteger)minimumZ maximumZ:(NSInteger)maximumZ {
    [self addTileOverLayWithBuilder:builder minimumZ:minimumZ maximumZ:maximumZ boundingMapRect:MAMapRectWorld];
}

- (void)addTileOverLayWithBuilder:(TileOverlayUrlBuilder)builder minimumZ:(NSInteger)minimumZ maximumZ:(NSInteger)maximumZ boundingMapRect:(MAMapRect)boundingMapRect {
    // 添加自定义瓦片图层
    PPGTileOverlay *overlay = [[PPGTileOverlay alloc] init];
    overlay.maximumZ = maximumZ;
    overlay.minimumZ = minimumZ;
    overlay.boundingMapRect = boundingMapRect;
    overlay.builder = builder;
    [self addOverlay:overlay];
}

这样改造基本就完成了,在ViewController中也测试一下,也没有问题。

注册Cocoapods

在终端中输入pod trunk register [YOUR_EMAIL] [YOUR_NAME] --verbose,cocoapods会发送一个验证邮件到你的邮箱中,按提示完成验证后回到终端,输入pod trunk me,可以看到注册好的信息了 。这部可能需要梯子

cocoapods注册成功

创建Pod组件

在终端中进入项目目录,运行下面的命令
pod spec create PPG_TileOverlay_AMap
会生成一个podspec文件,使用文本编辑器打开PPG_TileOverlay_AMap.podspec文件,修改文件内容,下面对部分文件内容进行解释

Pod::Spec.new do |spec|

  # 基本信息
  spec.name         = "PPG_TileOverlay_AMap"
  spec.version      = "0.0.1"
  spec.summary      = "高德地图添加瓦片地图"

  # 描述,要比上面的summary多一点内容!
  spec.description  = <<-DESC
  在地图组件中快速添加自定义的瓦片地图
                   DESC

  # 项目介绍主页
  spec.homepage     = "https://github.com/gaopeng-hz/PPG_TileOverlay_AMap"

  # LICENCE文件,可以直接在GitHub上生成
  spec.license      = { :type => "MIT", :file => "LICENSE" }

  # 作者信息
  spec.author             = { "gaopeng" => "gaopeng62524@126.com" }

  # 指定系统和版本
  spec.platform     = :ios, "7.0"

  # 项目代码
  spec.source       = { :git => "https://github.com/gaopeng-hz/PPG_TileOverlay_AMap.git", :tag => "#{spec.version}" }

  # 源文件
  spec.source_files  = "TileOverlay/PPGMapView.{h,m}"

  # 头文件
  spec.public_header_files = "TileOverlay/PPGMapView.h"

  # 依赖
  spec.dependency 'SDWebImage', '~> 4.2'
  spec.dependency 'AMap3DMap'

end

编辑完成后需要对spec进行校验,在终端中执行下面的命令:

pod lib lint --use-libraries --allow-warnings

因为本次依赖SDWebImageAMap3DMap,所以需要加上--use-libraries参数,--allow-warnings表示允许warning,检查通过后会提示XXX passed validation

检查通过提示

通过后可以把代码提交到spec中指定的git仓库中,并且打上tag。

git commit -am '提交组件'
git tag 0.0.1  #跟spec中tag一致
git push origin master
git push --tags

推送到Cocoapods远程仓库

pod trunk push PPG_TileOverlay_AMap.podspec --use-libraries --allow-warnings

成功后有提示


推送成功提示

访问上图中的链接已经可以看到组件在cocoapods上的页面。

测试组件

新建一个工程,添加pod

Podfile

target 'TileOverlayDemo' do

  # Pods for TileOverlayDemo
  pod 'PPG_TileOverlay_AMap'

end

ViewController.h


#import "ViewController.h"
#import <PPGMapView.h>

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    PPGMapView *mapView = [[PPGMapView alloc] initWithFrame:self.view.bounds];
    [mapView addTileOverLayWithBuilder:^NSURL * _Nullable(MATileOverlayPath path) {
        NSString *urlStr = [NSString stringWithFormat:@"_url_template_"];
        return [NSURL URLWithString:urlStr];
    }];
    
    [self.view addSubview:mapView];
}

@end

测试成功。这样一个公共的组件就完成了。

代码仓库地址:https://github.com/gaopeng-hz/PPG_TileOverlay_AMap

上一篇下一篇

猜你喜欢

热点阅读