サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
CES 2025
dev.eyewhale.com
GooglePlayサービス 7.8以降では「Mobile Vision API」ってのが追加されていて、これを使うとQRコードの認識が行えるようです。 ググってみると色々とサンプルはあるのですが、いかんせん複雑になっており「QRコードを認識する!」って箇所がわかり辛く思いました。 そこで超シンプルなサンプルを作成しましたよ。 簡単にQRコードが認識できると思いますよ。 まずは準備から。 build.gradleへ依存ライブラリを追記します。 dependencies { compile 'com.google.android.gms:play-services-vision:10.2.0' } 次にManifestへ権限などを追記します。 下記の uses-feature、uses-permission、meta-dataを追記してください。 <manifest xmlns:androi
javaでファイルのリストを取得したら遅いよ。 ローカルでも遅いんだけど、ネットワーク越しだともうね。。 あまりに遅いので対策を考えてみました。 例えば指定されたディレクトリ以下のファイル名を全て取得するとこんなコードになったりしますよね。 private listFiles(File dir){ File[] files = dir.listFiles(); // (a) for (File f : files) { if (f.isFile()){ // (c) String filename = f.getName(); // (b) System.out.println(filename); } else { listFile(f); } } } 単純ですね。 ただ、これだと遅いんです。 Fileのインスタンスから取得している情報は下記の3つなのですが、どうやらそれぞれについて毎回
objective-cのblocksに変わるものとしてSwiftではモダンなクロージャが導入されています。 簡単な例から var closure = {(valueMap:Dictionary<String,Int>) -> Int in var total = 0 for p in valueMap.values { total += p } return total } 解説すると dictionary を引数として Int を返すクロージャを宣言して 変数”closure”に格納しています。 なんだか構文がややこしいように見えますが”in”の前にパラメータ・戻り値、”in”の後に実装を書き、全体を{・・・}で囲っているだけです。 こんな構造 { (引数) -> (戻り値) in //実装 } blocksに比べると随分と分かりやすい構文だと思います。 この変数に格納されたクロージャを
Y軸を中心に(3D的に?)UIViewを回転させる方法です。 Layerアニメーションの終了時に処理をさせるサンプルにもなっています。 // 回転させたいUIViewのLayerを取得 CALayer* layer = self.view.layer; // トランザクションの開始 [CATransaction begin]; [CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions]; // Y軸での回転アニメーション CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.y"]; animation.duration = 0.4; // 速度(秒数) animat
SwiftのEnumは強力です。 普通に宣言した場合 enum CameraMakers { case Canon , Nikon , Olympus , Panasonic , Sigma , Sony , Hasselblad , PhaseOne } // 使い方 // 素直に値を参照できる var maker = CameraMakers.Nikon // コンパイラが型を分かっていたらenum型を省略することも可能 maker = .Canon Int値としての列挙型 割り当てられた値は”Raw Value”って呼ばれます enum Weeks:Int { case Sunday = 1,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday // enumの中にも関数を書けるよ! func japaneseCaption() -> S
SequenceTypeを実装することによって独自クラスをfor-inなどでループ処理することが可能になります。 SequenceTypeプロトコルは func generate() -> GeneratorType だけを実装すれば良いのですが、 今回のサンプルでは二分探索(バイナリサーチ)によるジェネリックスなSortedListを実装してみました。 使い方はこんな感じです // イニシャライザで比較関数を渡す // この例ではクロージャを使っています let sortedList = SortedList<Int>(){ (left:Int,right:Int)-> CompareResult in if (left == right) { return .Equal } else if (left > right) { return CompareResult.LeftLarge
C#でのNullable、scalaのOptionのようなnull値(nil値)を許容する変数を示します。 いきなりですが、下記のコードはコンパイルできるでしょうか? var text:String = nil javaやobjective-cの考えかただと通りますよね。 でもswiftでは通りません。 Stringにはnilを代入できなのです。 でも無いことを示したいこともありますよね。 そんな時にOptionalを使います var text:String? = nil Stringの後に付けた”?”がオプショナルの宣言で、値が入ってるか入ってないか分からない変数を示します。 これはStringをラップしたString?という変数という認識で良いのではないかと思います。 このOptionalな値はそのままでは使えません。 ラップしている”中身”を取り出す必要があります。 その時に使うのが
クラス宣言はとてもシンプル class クラス名:基底クラス { ・・・実装 } やっぱり構文はシンプルなのが一番 いろんな要素を詰め込んだクラスのサンプル class Programmer { // プロパティの宣言 // 普通に宣言 var name = "" // ※今のところprivateな宣言は出来ないっぽい // セッター、ゲッターの指定 var _company:String? var company:String? { get { return _company } set(newValue){ _company = newValue } } //※ セッター、ゲッターの指定は他のプロパティから計算で求められたり、 // 計算結果を他のプロパティに格納するような場合に使うと良いと思う。 // この例は良くないね。 // 遅延評価するプロパティ // ※最初に参照された時に初
チュートリアルの一部やオープニング画面など、アプリ内で部分的にムービーを表示したい事ありますよね。 MPMoviePlayerControllerを使えば、至れり尽くせりで超簡単!なんですけど、UIを自分で作ったり細かい制御をしたい場合にはやはりAVFoundationを使った方が良さそうです。 AVFoundationを使ってもそんなに難しい処理ではないんですけど、表示アイテムの管理や各種Observerの管理などでちょっと面倒。 そんな時には下記のクラスを使って下さい。 UI無しで指定された動画の再生だけを行います。 再生・一時停止・シークなどはデレゲート、各メソッドを通じて外のUIを使うように作ってあります。 事前に AVFoundation.framework、CoreMedia.framework へのリンクを追加しておいて下さいね。 ヘッダー部から #import <UIKit
縦だけとか横だけのサンプルは良く見かけるのですが、例えば上スクロールだけを許して下にはスクロールさせない方法が見つからなかったので書いておきます。 (こんな制御に需要があるとはあまり思えませんが。。) ポイント1 スクロール方向の判定 UIScrollViewDelegateのscrollViewWillBeginDragging、scrollViewDidScrollでスクロールの前回座標を保存し、 scrollViewDidScrollでスクロールされた後の座標と比較すればOK ポイント2 スクロールのキャンセル スクロールの方向を求め、許可する方向以外だった時はスクロールの位置をスクロールの開始座標に戻します。 また、座標を戻したとしても慣性スクロールが発生しますのでscrollViewWillBeginDeceleratingで慣性スクロールをキャンセルします。(以前の記事参照)
bitcasaにちょっと期待していた自分がいたんですよね。 数ヶ月ほど前。 で、ご存知の方も多いでしょうけど11/21に価格改正が行われ、99ドル/1年だったものが999ドル/1年のビックリ価格になったのです。 (無制限プランの場合ね) 当初からサービスには99ドルで維持可能なのか疑問視されていたわけですが、CEOさんは「うちの重複除去と圧縮アルゴリズムすげーし大丈夫よ!w」と自身満々でおっしゃってらして「これは期待!」と思ってたわけです。 開発者用APIの公開もあることですしね。 しかし結局約10.1倍の価格改正となりガッカリしたわけです。 これが11/21の私。 んで、ここからが本題。 もうbitcasa見限ったのでアカウント消そうと思ったんですけど、 やってみるとこれがクソ面倒! まずWEBのUIで退会を探してもどこにもない! もしかして日本語UIだけないのかな?と思って英語UIで探
UIImagePickerControllerをそのまま使用すると静止画を選択できますが、動画が選択できません。 今回は動画を選択する方法です。 ポイントは mediaTypesにkUTTypeMovieを設定する UIImagePickerControllerMediaURLを使って動画のURLを取得する だけなんですけどね。 以下実例 事前にのインポートとUINavigationControllerDelegateとUIImagePickerControllerDelegateを対応プロトコルに追加しておきます。 UIImagePickerControllerを呼び出す時はこんな感じ ちなみにkUTTypeMovieの中身は”public.movie”です。 if([UIImagePickerController isSourceTypeAvailable:UIImagePickerC
このページを最初にブックマークしてみませんか?
『dev.eyewhale.com』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く