読者です 読者をやめる 読者になる 読者になる

がべーじこれくしょん

技術系とかいろいろ

PageMenuがSwift3に対応していなかったので自力で修正した話

普通にPodfileに追記してupdateしてcommand+Bでビルドすると大量のエラーが。

とりあえずネットを漁ったところ、CocoaPodsにあるCAPSPageMenu.swiftがどうやら古いものらしいので、PageMenuのGitHubからソースを丸パクリしてコピる。途中で警告でるけどUnPackする。

再度ビルドするものの一向にエラーは減らない。

とりあえず、Xcodeにくっついている自動変換機能を用いて変換する。

Edit -> Convert -> To Current Swift Syntaxを選択。

変換対象のファイルを選ぶ画面では、PageMenu.frameworkのみを選択し実行。これでだいぶエラーは減る。

あとは、エラーを一つ一つクリックし、fix-it欄に表示される修正候補をクリックしながら修正していく。

ただ、これでは修正仕切れないエラーが二種類ほどでてきた。

それが、'CGSizeMake' is unavailable in Swift'CGRectMake' is unavailable in Swiftの二種類である。

以下記事によれば、これらはどうやらSwift3.0ではすでに存在しない関数らしい。

qiita.com

「CGRectMake」→「CGRect」

<変更前>

private let mylabel = UILabel(frame:CGRectMake(0, 0, 100, 100))

<変更後>

private let mylabel = UILabel(frame:CGRect(x: 0, y: 0, width: 100, height: 100))

「CGSizeMake」→「CGSize」

<変更前>

myScrollview.contentSize = CGSizeMake(100, 100)

<変更後>

myScrollview.contentSize = CGSize(width: 100, height: 100)

元ソースを変更することも考えたが正直めんどいのでそれぞれ新規に関数を定義してラップすることに。

あまりグローバル空間を汚したくないがやむを得ません。衝突したら衝突したということで(???)

func CGRectMake(_ x: CGFloat, _ y: CGFloat, _ width: CGFloat, _ height: CGFloat) -> CGRect {
    return CGRect(x: x, y: y, width: width, height: height)
}

func CGSizeMake(_ width: CGFloat, _ height: CGFloat) -> CGSize {
    return CGSize(width: width, height: height)
}

以上のコードをCAPSPageMenu.swiftに貼り付ければ万事解決です。

一応今回諸々修正したものが以下です。コピペすれば使えると思います。

PageMenuをSwift3.0対応させた

本家リポジトリは以下です。ライセンスはすべて製作者に帰属します↓

github.com