1. 通知共有Webサービス「notify」をリリースしました。

    通知共有Webサービス「notify」をリリースしました。

    https://ntfy.jp/

     


    続きを読む...

  2. [Swift] 複数のprotocolを実装した引数を受け取る

    以前ならこのように書いていたものを、

    -(void)someFunc:(id<SomeDelegate, OtherDelegate>)multipleDelegate{}

    Swiftではジェネリクスを使ってこんなかんじで書きます。
    func someFunc<T where T:SomeDelegate,T:OtherDelegate>(multipleDelegate:T){}

  3. [Swift] optionalなprotocol

    定義はこんなかんじ。頭に「@objc」が必要です。

    @objc public protocol SomeDelegate{
    optional func someFunc()
    }

    呼び出しは、Swiftでは以下のように書けます。
    delegate?.someFunc?()

    以前のrespondsToSelectorのときとやってることは同じですが、Swiftだと1行ですっきり書けて良いですね。

  4. iOS通知センターの通知をアプリ側から消去する

    [[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0];
    [[UIApplication sharedApplication] cancelAllLocalNotifications];

    通常はこれで消える・・・のですが、ペイロードで指定しているバッジ数が「0」の場合消えてくれません。その場合、アプリ側でいったんバッジ数を設定し、その後0にします。

     
    [[UIApplication sharedApplication] setApplicationIconBadgeNumber: 1];
    [[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0];
    [[UIApplication sharedApplication] cancelAllLocalNotifications];

    こんなかんじです。無駄にハマりました。。。

  5. 住所管理サービス「AddressBook」をリリースしました



    住所管理サービス「AddressBook」を開発・リリースしました。 http://addressbook.kokonotsu.net/
    続きを読む...

  6. iOSアプリ「hz」をリリースしました




    続きを読む...

  7. メモアプリについてのメモ

    先日気づいてちょっと感動したのでメモ。 iPhoneのメモアプリは、アカウント選択後最初の階層にメモの一覧があって、どれかを選択するとその詳細にいくというシンプルな2階層のドリルダウン形式です。 このようなケースでUIを設計するとき、一つ一つのメモにタイトルをつけ、それを一覧で表示させる。そしてそのためにタイトル入力用のUIを考える。というようなことは普通にありえることだと思います。Evernoteその他、多くのアプリでそのタイプを見ることができます。 それに対して、メモアプリはそのようにはなっていません。
    続きを読む...

  8. SiriでChromeを操作してみる

    音声を使ってハンズフリーでアプリケーションを操作するサンプル


    Siriのprivate APIを叩けるというのをこちらの記事で拝見しましたので、試しにChromeを操作してみました。



     

    処理の流れとしては次のようなかんじになっています。

    1.一定以上の音声入力があるのを待ち受ける。(動画内でいちいち「シリ」と呼びかけているのはこのためです。)

    2.入力があった場合、siriのAPIを呼び出してdictationを開始。

    3.あらかじめ登録しておいた言葉(「検索」「戻って」など)にマッチするかどうかを調べる。

    4.マッチする場合、Chrome(にインストールしたpackaged appのhttpserver)にメッセージを送る。(こちらを使わせていただきました。chrome上で、Webサーバーを動かしてみた

    5.ChromeExtensionでブラウザに対してそれぞれの操作をする。

    というかんじです。

    サーバーとの通信時間があるので快適に操作するというわけにはいかないですね。Leap Motion なんかと組み合わせたらわりと面白いかもしれません。Leap Motion持ってませんが。

    コレまでの道はまだまだ遠そうです。

     


     

  9. UIActivityに別々の値を渡す

    複数のUIActivityにそれぞれの別の値を渡したい場合、次のようにします。(UIActivityViewControllerを使っている前提です。)

    まず、データを渡す側。UIActivityItemSourceを実装して、あらかじめUIActivityで定義したactivityTypeごとにそれぞれ別の値をreturnします。

    -(id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType{
    if([activityType isEqualToString:@"anActivity"]){
    return @"value";
    }else{
    return @"another value";
    }
    }

    あとはそれをActivity側でprepareWithActivityItems:が呼ばれるときに受け取ってあげればOKです。
    - (void)prepareWithActivityItems:(NSArray *)activityItems {
    self.queryString = [activityItems lastObject];
    }