2016-01-01から1年間の記事一覧

ジャンプするSKActionを作る

SKActionには「ジャンプする」を表すアクションがなかったので作ってみました。 public extension SKAction { class func jump(height: CGFloat, duration seconds: TimeInterval) -> SKAction { var initialY: CGFloat = 0.0 var initialFlag = true let cu…

ループ途中で抜ける処理をfilter()等で書き換える

Swiftを触っていると、色々なループをmap/forEachなどで置き換えたくなります。その1パターンの実装例を考えてみます。 目的のデータを探すためのループ ループ処理のユースケースとして、下例のような「目的の値を取り出すために見つかるまでループ。見つか…

iOS10のWKWebViewではビデオのインライン再生はできない→できます!

2016/10/28追記: 初回投稿時に「iOS10のWKWebViewではビデオのインライン再生はできない」として作成した記事ですが、その後の検証によりインライン再生できることが分かりました。 そのため現在の内容は初出時の内容を一部修正したものになっています。ご…

SKNodeをロケットのように震わせる

ロケットを発射したときのように、ノードをブルブル震えさせつつ、けれども元々の場所は維持するアクションはどうやって作ったらいいんだろう、と悩んでいました。 調べたところ、ここで紹介されている方法がなかなか良いことがわかりました。Swift 3で書く…

SpriteKitでテクスチャアトラスからSKSpriteNodeを作る

SpriteKitでノード(SKNode)に画像を使いたい場合、SKSpriteNodeをテクスチャアトラスから作るのが便利です。 通常、テクスチャアトラスを作るにはたいてい専用のツールが必要で、隙間なく上手に並べたいときなどなかなか面倒だったりします。ですがXcodeだと…

マイクの入力レベルをdBで取得する

マイクの入力レベルを調べるのには、AVFoundationを使うのがお手軽です。下のコードは、マイクからの入力レベルをコンソール上に出力するごくごく簡単なサンプルです。 try!を使っていたりcanAddInput/Output()を使っていなかったりしていますので、その点は…

画面遷移したときに下部のタブバーを一時的に消す

ナビゲーションコントローラをタブバーと組み合わせて使っている時、プッシュ遷移した先の画面ではタブバーを消して全画面表示したいケースはあります。設定が終わるまでタブバーによる遷移を避けたいときなどがそうです。遷移先から戻ってきたときには、ま…

forkしたOSSライブラリをCocoaPodsで扱う

CocoaPodsを使った、既存のOSSライブラリをforkしたリポジトリをプロジェクトに組み込む方法です。 前ふり CocoaPodsやCarthageなどのパッケージ管理システムを使うと、githubなどで公開されているOSSライブラリを簡単に使うことはよくあります。これらは簡…

パターンマッチング「func ~=」のデフォルト実装は「func ==」

TL;DR パターンマッチングのルールを自分で定義するときは、~=演算子、つまり「func ~=」を定義することになるわけですが、未定義の場合のデフォルト実装は「func ==」を使うようになっている、という話です。そして、NSObjectのデフォルトはisEqual()が使わ…

UIEdgeInsetsを(強引に)@IBInspectable化する

@IBInspectableで入力できる型は、User Defined Runtime Attributesで指定できる型と同じ、とXcodeのドキュメントには書かれています。つまり、Localized StringやNilを除く以下の型を指定できます。 値の型 オブジェクト エディタ上の状況 Boolean Bool チ…

RxSwiftを勉強していますが、なかなか理解が進まないシリーズです。 RxSwift / RxCocoaのバージョンは2.2を対象にしています。 学習の手始めに「UIButtonがタップされたら、画面上にあるラベルをhiddenにする」というごくごく簡単な処理を書いてみようと思っ…

Emacsで選択した領域を検索対象にする

EmacsでC-sで検索するときに領域が選択されていたら、その領域を検索対象として検索するマクロを、自分の.emacsに追加しました。 ;; 選択した領域を使ってインクリメンタル検索を実行 (defadvice isearch-mode (around isearch-mode-default-string (forward…

自前CocoaPodsライブラリで公開するヘッダファイルを限定する方法

CocoaPodsは、自動作成するumbrellaヘッダにデフォルトで全ヘッダファイルを含めます。 Objective-Cだけで書いてある場合、この振る舞いでも特に問題にはなりません。・・・ですが、ライブラリにC++コードなどSwiftで対応しない言語のファイルが含まれている…

RxSwiftでUIKitを扱うにはRxCocoaが必要

内容はタイトル通りです。引き続きRxSwiftについて。 github.com 「RxSwiftでUIKitを試してみよう。このAPIページを見ると色々とあるな…あれ?何も使えない?」と。 よくよく確認してみると、RxSwiftの下には別のpodspecファイルとして、RxCocoa.podspecがあ…

RxSwiftのMainSchedulerは何物か

遅まきながら、RxSwiftに手を付け始めました。 github.com リアクティブプログラミングはまったく経験がないので、公式の「Getting Started」を読みながら、概念や基本を調べることにします。 ですが、まだ分からないことばかりで詳細には全然立入れていませ…

コマンドラインからApp Storeのアプリをインストール

下のブログで、コマンドラインからApp Storeのアプリをインストールするコマンドラインツール「mas」が公開されていることを知りました。 rcmdnk.github.io 確かにわざわざAppStoreから1つずつインストールするのは面倒なので、自分の環境にも入れてみること…

spacemacsのトラックパッドスクロール量を調節する

spacemacsが思いのほか使いやすかったので、これまで育ててきた.emacsをバッサリ捨てて、乗り換えることにしました。思っていた以上にspacemacsは至れり尽くせりで動いてくれたので、 spacemacsはユーザー様の設定を~/.spacemacsの末尾、dotspacemacs/user-c…

std::basic_stringの「&foo[0]」は何を返すか

c++

とあるコードを読んでいたら、 std::string foo = "abc"; printf("[%s]\n", &foo[0]); // [abc] みたいな書き方をしていて「ん?stringなのに??」と思ったので、きちんと調べてみました。結論を書いてしまうと、 配列添字の演算子「[]」は、アドレス取得の…

(ようやく)SwiftのflatMap()を追いかける

前回(といっても大分前になってしまいましたが)、flatMap==flatten(map())であることから、flatMap()の準備としてflatten()を先に読みました。 swiftlife.hatenablog.jp Swiftのflatten()は平坦化を直ちに行うのではなく、要素が必要になった時にはじめて処…

SKSceneとUIViewとの座標変換

SpriteKitのSKSceneの座標系は、UIViewの左上座標とは異なり、y軸が反転した左下座標系になっています。そのため、UIGestureRecognizerのようなUIView側の座標系をSpriteKitに持ち込むには、座標系を変換してあげなくてはいけません。 具体的には、SKScene…

svn commit時に英語でメッセージ書くためのヒントを表示する

Qiitaに次のような投稿がありました。 qiita.com git commitをするときに英語の例文をコメントとして表示するようにして、英語コミット力を上げようという内容です。これはいいなと、同じようなことがSubversionでも出来ないかなと調べてみました。結果とし…

NSNumberで扱われるSwiftの数値型

SwiftのIntやFloatのようなプリミティブな数値型をCやObjective-Cとで相互に扱う場合、その型は基本的に同じ値域の型で表されます。具体的には「Using Swift with Cocoa and Objective-C (Swift 2.1)」の「Interacting with C APIs」-「Primitive Types」に…

gitbookでPDF/epub出力できるようにする(calibre)

前回の記事によりmarkdownファイルをgitbookでHTML化できるようになったわけですが、せっかくなのでPDFでも出力できるようにします。 gitbookからPDF化するにはCalibreを使う gitbookのgithubページには、eBookへの出力について次のように書いてあります。 e…

Gitbookのインストール(2016/1/19時点)

お仕事で色々と勉強している、ここには書けないことをまとめるためにいいツールはないかと探していたところ、現時点ではGitBookが良さそうだと思い、インストールしてみました。 別にTeXやExcelやWordなどでもよかったのですが、書き殴りたい時にはどれも大…

npmのプロキシ設定

ツールごとにプロキシサーバーの設定が異なり、必要なときにいつも忘れてしまうので、備忘録として。 npmでプロキシサーバーを設定するには、npmコマンドから、config set proxyやconfig set https-proxyを使います。 % npm config set proxy http://XXX.XXX…

Swiftでインラインアセンブラを書く

残念ですが書けません。インラインアセンブラはC/C++/Objective-C側で書く必要があります。 (・・・最近ARMアセンブラを勉強しているので、iOSでCPSRレジスタとか操作する処理書けないかなとか期待したのですが、そういや最近のiPhoneて64bitだったと気づい…

USBシリアル変換ケーブル(SRC06-USB)をOS Xで使う

USBシリアル変換ケーブルに、バッファローの「SRC06USB・06USM」という製品を使うことになったのですが、あいにくバッファローのダウンロードページにはOS X向けのドライバーがありません。 USBシリアル変換ケーブル | バッファロー そこで、Future Technolo…

プロパティのアクセスコントロール

Swiftのプロパティで、「getterは外部に公開したいけれど、setterはプライベートにしたい。けれどもcomputed propertyを使って値を保持する変数をわざわざ別に持つのは面倒だ」というケースはよくあります。 そのような場合、「private(set)/internal(set)」…

RaspberryPI(Jessie環境)で固定IPアドレスを設定する

RaspberryPIにJessieを入れたところ、どれだけ/etc/network/interfacesの設定を変更しても効果がなかったので、メモ。 これまでのWheezyだと前述の/etc/network/interfacesを編集すればよかったのですが、Jessieでは同ファイルのコメントに # Please note th…

SKViewのバグ?

短いついでに、今日はまった面倒なバグも残しておきます。 SKViewのshowsFieldsプロパティは、マニュアルによると物理フィールドのデバッグ情報を出力できるとのこと。 showsFields Property A Boolean value that indicates whether the view displays info…