タグ

ブックマーク / qiita.com/codelynx (13)

  • Swift で計算して Bezier 曲線を描く - Qiita

    今回は、UIBezierPath をコードで計算して表示する方法を紹介したいと思います。現実的には iOS や macOS であれば、UIBezierPath なり NSBezierPath を生成して、stroke() するだけでいいのですが、どうやってその座標を計算しているか気になる型は参考にしてください。 Bezier Path は以下のような ベジエ曲線または直線を組み合わせたものです。下図の P0から P3の間に、コントロールポイントと呼ばれる P1、P2 を設け滑らかに曲線を描きます。 計算のイメージは言葉で説明するより図になっている方がわかりやすいと思うので、GIF アニメーションを引用します。 https://upload.wikimedia.org/wikipedia/commons/d/db/Bézier_3_big.gif これを swift で計算してみる事にしまし

    Swift で計算して Bezier 曲線を描く - Qiita
  • Swift2.2 から Swift3.0 への変換実例メモ - Qiita

    Swift 2.2 から Swift 3.0 に自動変換した場合に、うまくいった場合と手動で直さなければいけなかった場合のまとめ。自分のプロジェクト内で、実際に発生した内容をメモにのしていたものです。生々しい名前は編集してあります。また、メモを取る時に操作ミスなどが混在している場合もあるので、ご留意くださいませ。 2017.12 加筆† Foundation // before private let _gregorian = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!

    Swift2.2 から Swift3.0 への変換実例メモ - Qiita
  • iOS & OS X で zip ファイルをオンメモリで解凍する - Qiita

    zip をオンメモリで解凍 iOS や OS X のアプリでサーバーよりコンテンツをダウンロードしてデバイスで利用する場合など、やはり zip した内容を解凍して利用するケースは少ないくないと思います。パフォーマンスを上げるためにオンメモリで解凍したい場合もあるかと思います。今回は、そんな場合の為にオンメモリで解凍可能な ZUnzip を紹介いたします。 ZUnzip ZUnzip は https://github.com/codelynx/ZUnzip から取得できます。 ZUnzip の初期化 ZUnzipzipファイルのパスを渡すもしくは、zipファイルのデータを渡して初期化します。

    iOS & OS X で zip ファイルをオンメモリで解凍する - Qiita
  • Swift で Framework を作ってみる使ってみる - Qiita

    アプリを横断して同じコードやViewにViewControllerクラスを使いまわしたい時は時折あると思います。旧来は ソースそのものを使いまわしたり、static library を作って使いまわしていた事と思いますが、Swift時代では、そもそも Swift のコードは static library が作れなかったり、ViewController だけでなく、.xib (.nib) や storyboard を使いまわそうとすると、static library では無理があります。 iOS8 からは Framework が使えるようになりました。Frameworkはコードだけでなく、storyboard や画像などのリソースを含める事が出来。そして Header ファイルを含める事ができるので、使い回す側のクライアントサイドへ class 名や API を引き渡す事が出来ます。 OS

    Swift で Framework を作ってみる使ってみる - Qiita
  • Swift 世代の排他制御 - Qiita

    Update: 関連する記事のリンクを追加しました。 Swift 3 世代の排他制御 http://qiita.com/codelynx/items/56ce2f91cd3f4f409aeb 今回は Swift で排他制御が必要になった時の TIPS を紹介したいと思います。 Objective-C時代の古き良き排他制御 GCDを使った排他制御 NSLock と defer を使った排他制御 Objective-C時代の古き良き排他制御 Objective-C の時代に排他制御のコードを書いた人は @synchronized をよく使ったと思います。簡単な構文で手軽に排他制御できていたので重宝していたかと思います。 // Objective-C 時代の排他制御 - (NSData *)readDataRange:(NSRange)range { @synchronized(self) {

    Swift 世代の排他制御 - Qiita
  • [Swift] NSScanner でハフマンコードを扱う - Qiita

    NSScanner を Swift で便利に扱える extension 文字列をパースする時に便利なのが、NSScanner です。しかし、Swift から使うには意外と面倒臭いです。以下のように、NSString を戻す場所を用意して、NSString を String に変換してとか色々面倒だったりします。特に、NSString を戻す場所を複数必要とする場合は、無駄に行数が増える事になり閉口します。 var string: NSString? = nil if scanner.scanString("wow", intoString: &string1) { let token = string as! String // some code } public extension NSScanner { public func scanString(string: String) -

    [Swift] NSScanner でハフマンコードを扱う - Qiita
  • Swift で bitfield を使う - Qiita

    English article is here. C言語の bitfield Swift に C言語 でいう bitfield機能 がない事は承知かもしれません。多くの場合はそれほど必要に迫られる場合はないかもしれませんが、しかし、時にはそんな機能が必要になる事だってあります。C言語ではこんな使い方をしていた人もいたかもしれません。 struct RGB_t { unsigned int red : 4; unsigned int greeb : 4; unsigned int blue : 4 unsigned int alpha : 4 }; struct RGB_t color; color.red = 0xf color.green = 0x0 color.blue = 0x8 color.alpha = 0xf var bitfield = ZBitField([("red",

    Swift で bitfield を使う - Qiita
  • Swift 3.0 で C言語スタイルの for ループが廃止されるので、その書き換え方法のまとめ - Qiita

    C言語スタイル for ループの廃止 C言語スタイルの for ループが Swift 3.0 で廃止される見込みの為(エラーメッセージには将来のみたいな表現だけど)、これまでこのスタイルで書いてきた for ループを書き直さないといけなくなりました。そこで、典型的なパターンを書き直す方法をまとめてみました。 for var i = 0 ; i < 100 ; i++ もっとも典型的な C言語スタイルの for ループ、0 から 100 未満の for ループの場合です。

    Swift 3.0 で C言語スタイルの for ループが廃止されるので、その書き換え方法のまとめ - Qiita
  • Swiftでほんの一部しか違わないクラスのバリエーションの実装方法の考察 - Qiita

    頭の体操 iOS馬場の勉強会で取り組んでいた課題が面白そうだったので、会場で時間切れになったネタを持ち帰ってみました。そこで、今回は頭の体操をしてみたいと思います。読者の方も単に読みとばすのではなくて、自分ならどうすると考えながら読んでいただけると幸いです。 まず前回(直前)、「Swift で Key や Value に弱参照が使える Dictionary 的な方法を考える」の中で、最初に出てきたコードがこれです。 class ZStrongToWeakMapTable<K: AnyObject, V: AnyObject> { let mapTable: NSMapTable init() { self.mapTable = NSMapTable.strongToWeakObjectsMapTable() // <== Here !! } subscript(key: K) -> V?

    Swiftでほんの一部しか違わないクラスのバリエーションの実装方法の考察 - Qiita
  • Swift で BigEndian LittleEndian の判定でハマってしまったのでメモ - Qiita

    背景 Int や Float などの数値情報をファイルなどに書き出す時は、テキストとして書き出す方法もありますが、そのままバイト列を書き出したり読み込んだりする場合もあります。 後者の場合、幅広い種々の環境で読み込もうとすると、エンディアンの問題に遭遇したりします。エンディアン自体の問題には深入りしませんが、汎用性の高いデータとして保存したい場合は、やっぱりここは押さえておきたいところです。 Int16, Int32, Int64 などは、Foundation に CFSwapIntXXBigToHost() とか CFSwapInt32HostToBig() とか用意されていて、保存時のエンディアンさえ決まっていれば、保存直前にさっと通してあげれば、対応できます。 一方、Float では CFSwapFloatBigToHost()、CFSwapFloatHostToBig() なんての

    Swift で BigEndian LittleEndian の判定でハマってしまったのでメモ - Qiita
  • Basic Metal 2D - Qiita

    はじめに iPad Pro と Apple Pencil が発表されてから、何かお絵描きのようなプロダクティビティのアプリを開発したいとおもい、Metal に目をつけて勉強してきました。やはり最高のパフォーマンスを出すには METAL かなと勝手に思い WWDC を見たりと秋頃から勉強を続けてまいりましたが、ずっと陸サーファーならぬ陸METALの状態が続いていたので、2015年の年末頃から練習がてらに、2D METAL のボイラープレートになるようなサンプルを書いてみましたので、その解説をしてみたいと思います。 Basic Metal 2D の入手 より入手してください。ライセンスは MIT になっています。Xcodeでプロジェクトを開くと Mac用 と iOS用のターゲットが入っています。iOS版 はシミュレーターでは動かないのでご了承ください。ホスト側のコードは Swift になってい

    Basic Metal 2D - Qiita
  • UIPageViewController 八つの掟 - Qiita

    結構理解しているつもりだった UIPageViewController でしたが、毎回同じようなところで何度もハマるので、忘れる前に記憶の整理を兼ねてメモしておく事とします。 一、PageCurl と Scroll を動的に変更したい場合は、InterfaceBuilderではなく、コードで作成すべし transitionStyle は readonly なので、InterfaceBuilder でインスタンス化させると、transitionStyle は変更できません。それで PageCurl と Scroll を動的に変更したい場合は、自分の ViewController 内に、コードでインスタンス化させて追加します。そうすれば、変更したい場合は、UIPageViewController 自体を一旦削除して作り直す事ができます。

    UIPageViewController 八つの掟 - Qiita
  • Swift で簡単なシングルトンの実装方法 - Qiita

    Swift で マネージャー系のコードを書く時にはシングルトンの実装を迫られる場合があります。インスタンスとしていくつも存在されても困る場合があるからです。そんな時に便利な二つのイディオムを紹介します。 通常のシングルトン

    Swift で簡単なシングルトンの実装方法 - Qiita
  • 1