2013年4月28日日曜日

UIImageViewのアニメーション

UIImageViewをアニメーションするテストクラス

実際にはアニメーションの時間が長いと複数見えるし、アニメーション途中で終了させる場合にはビクつく問題がある。
でもアニメーションの時間が短いとそんなには目立たないかな。

※iOS6のARC前提
※閉じるアニメーションの終了のBlockで強引にremoveFromSuperview※しているが
 一応アニメーションの完了まではViewの実態は保持される
 (実際に利用側でインスタンスにnilを代入しているが落ちない)

<hファイル>

#import <UIKit/UIKit.h>

@interface AnimationImageView : UIImageView

- (void)setEndFrame:(CGRect)rect;
- (void)setStartFrame:(CGRect)rect;
- (void)setTime:(float)time;
- (void)OpenAnimation;
- (void)CloseAnimation;

@end



<mファイル>
#import "AnimationImageView.h"

@implementation AnimationImageView
{
    float animeTime;
    CGRect startFrame;
    CGRect endFrame;
}

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
        
        animeTime = 0.0;
        startFrame = CGRectNull;
        endFrame = CGRectNull;
    }
    return self;
}

- (void)setEndFrame:(CGRect)rect
{
    NSLog(@"setEndFrame");
    endFrame = rect;
}
- (void)setStartFrame:(CGRect)rect
{
    NSLog(@"setStartFrame");
    startFrame = rect;
}
- (void)setTime:(float)time
{
    NSLog(@"setTime");
    animeTime = time;
}
- (void)OpenAnimation
{
    NSLog(@"OpenAnimation");

    //アニメーションなしの場合
    if (    (animeTime == 0.0)
        ||  (CGRectIsNull(startFrame))
        ||  (CGRectIsNull(endFrame))
        )
        return;
    
    self.frame = startFrame;
    self.alpha = 0.0;
    [UIView animateWithDuration:animeTime
                          delay:0.0
                        options: UIViewAnimationOptionCurveEaseOut
                     animations:^{
                         self.frame = endFrame;
                         self.alpha = 1.0;
                     }
                     completion:^(BOOL finished){
                         NSLog(@"Open End!");
                     }];
}
- (void)CloseAnimation
{
    NSLog(@"CloseAnimation");
    //アニメーションなしの場合
    if (    (animeTime == 0.0)
        ||  (CGRectIsNull(startFrame))
        ||  (CGRectIsNull(endFrame))
        )
    {
        //
    }
    else
    {
        [UIView animateWithDuration:animeTime
                              delay:0.0
                            options: UIViewAnimationOptionCurveEaseOut
                         animations:^{
                             self.frame = startFrame;
                             self.alpha = 0.0;
                         }
                         completion:^(BOOL finished){
                             NSLog(@"Close end!");
                             [self removeFromSuperview];
                         }];
    }
}

@end

<使い方>
- (IBAction)pushBtnAnime:(id)sender
{
    if (animView == nil)
    {
        NSLog(@"pushBtnOpen");
        
        UIImage *img = [UIImage imageNamed:@"testImage.png"];
        animView = [[AnimationImageView alloc] initWithImage:img];

        //iPad決めうちで右からセンターへアニメーション
        CGRect srect = CGRectMake(768,((1024-img.size.height)/2),
                                  img.size.width,img.size.height);
        CGRect erect = CGRectMake(((768-img.size.width)/2),((1024-img.size.height)/2),
                                  img.size.width,img.size.height);
        [animView setStartFrame:srect];
        [animView setEndFrame:erect];
        [animView setTime:0.5];
        [self.view addSubview:animView];
        [animView OpenAnimation];
    }
    else
    {
        [animView CloseAnimation];
        animView = nil;
    }
}

2012年4月15日日曜日

galaxy nexus(+IIJmio SIM)

galaxy nexusがオークションであまりに安かったので少し前に衝動買いをしました。また、評判の良かったIIJmioのSIMにイオンSIMから乗り換えたので、そのあたりを簡単に。


1)nexusについて
android端末もデュアルコアのハードで4.x(ICS)だとサクサクで普通に使えるもんですね。
iOSが好きなのでメイン端末をandroidにする気はこれまでなかったんですが、テザリングの出来るandroid端末とiPadかiPod touchあたりで十分に満足できる気がしてきました。

あと、iPhone4/4Sは見た目には大変美しいのですが、そのままだとどうも持ちにくい気がします。しかしnexusは薄くて軽いし、特に角がないので大きさの割に非常に持ちやすいです。
#最近の通勤時にはnexusしか触ってません。。

唯一の弱点は電池の持ちが悪いですね、画面が大きいので仕方がないとは思いますが。例えば、これまでiPhone4で写メールやマップを結構利用してギリギリ2日という使い方で、nexusだと1日の終わりには残り10%ちょっとと言う感じでしょうか。

2)IIJmioの128プラン
自分の利用方法だと、最強の通信プランです。
はっきり言ってsoftbankのiPhone回線を解約してしまおうかと少し考えてしまうくらいです。
特に、テキスト主体の軽めのデータ通信であればsoftbankの回線より
早かったりします。(twitter、RSS、2chなどテキストだけの場合)これはどうも128kbpsへの収束をさせる方法がbmobileとは異なり、通信し始めの転送速度が128kbpsを大幅に上回っているIIJの仕様みたいです。
skypeや050plusなどのiP電話も場合によっては遅延がありますが、なんとか使えます。
#どこかのMVNO会社が2000円位で(ちゃんと使える)256kbps+iP電話のプランを出してくんないかな

3)総評
個人的に、今後のモバイル端末としての理想は以下のようなものなんですが、今のiPhone(電話あり)+androidもありかも知れません。

・iPadなどの電池残量を気にしない端末でテザリング
・iPhoneかandroidをwifi(もしくはbluetooth)子機として利用
#3G回線よりwifiやBTの方が電池持ちも良いし最高じゃないですか?


<おまけ>
そういえば、nexusは届いてしばらくして開腹手術が行われています。
しかしdocomo製品のAPNをすげ替えると言うダイナミックなテザリングガードはなんとかしてもらいたいもんです。せめて自分のとこのSIMだけの縛りにして欲しい。
nexusは未だに非対応(にわざわざ加工してる)なので、どのみち関係ないんですけどもね。

2012年4月6日金曜日

androidのアプリ名を変える

友人に聞かれて少し調べたので、備忘録として。
やりたい事はホーム画面で表示されるウィジェットの名前を変えたいとの事。
androidに詳しくないまま、xmlをピピっといじれば出来るだろうと調べたら、
思ってたより手間はかかりましたが出来ました。

注意:
rootをとっている事が前提となります。これはメーカーやキャリアの
保証がなくなる行為です。またこの記事の作業を行われて問題が出たと
しても対応できません。

では手順。
ここではLED Lightと言うウィジェットを例に説明します。



1.下準備
============================
1.1.(android)LED Lightを入れる
試しに変更するウィジェト
https://play.google.com/store/apps/details?id=jp.picolyl.led_light

1.2.(android)Titanium Backup ★ rootを入れる
https://play.google.com/store/apps/details?id=com.keramidas.TitaniumBackup
このツールで名前を変更したいウィジェットのバックアップを取っておく
(デフォルト設定ならsdcard/backup/フォルダにいくつかファイルが出来る)

1.3.(android)LED Lightをアンインストールする

1.4.(pc)[1.2.]で出来たファイルをパソコンにコピーする
(例えばこんなファイル名:
jp.picolyl.led_light-29bb01df6b7a846828db592fd8eda941.apk)

1.5.(pc)Apk Managerをダウンロード
http://apkmultitool.com/?q=node/5
上のページを開いて、以下の文字を探してDownloadをクリック
APK Manager 5.0.2 - Download


2.ウィジェットの加工
============================
2.1.(pc)apkファイルを格納
[1.5.]でダウンロードしたファイルを解凍して出来た、
place-apk-here-for-modding
というフォルダに[1.4.]のapkファイルを格納

2.2.(pc)apkの解凍
解凍した直下にあるScript.batを(ダブルクリックで)実行
"9"と入力してリターン(9    Decompile apk)
→ projectsフォルダにapkが解凍される
<このコマンドラインのウインドウはそのまま立ち上げておく>

2.3.(pc)リソースの修正
Apk_Manager_5.0.2\projects\jp.picolyl.led_light-29bb01df6b7a846828db592fd8eda941.apk
\res\values-ja
の中のstrings.xmlをテキストエディタで開いて、以下を編集

<string name="app_name">【L_E_Dとか好きな名前に】</string>

2.4.(android)androidをいったんPCから外して、設定メニューにある
開発者向けオプションのUSBデバッグをオンにして繋ぎ直す

2.5.インストール
[2.2.]のコマンドラインのウインドウで
"14"と入力してリターン(14   Compile apk / Sign apk / Install apk (Non System Apps Only))

3.完成
============================
androidの画面でウィジェットを追加しなおすと名前が変わっている。
他のアプリやウィジェットでも同じような手順で変更出来ると思います。



2011年11月19日土曜日

Photoshop Elements 10 Editor

ちょっと毛色が変わりますがPhotoshopのお話です。
以前から修復ブラシの「コンテンツに応じる」が気になって気になって仕方がなかったんです。

Photoshop Element(以下PE) 6は持っていたのですが、mac AppStoreでついにPE 10 Editorが発売されていたので購入してみました。

<PE 10 Editor購入のポイント>
・憧れの「コンテンツに応じる」を試してみたい
・ついに日本語化されたPE 10 Editorが出た(英語でも構わないけど、、)
・Editor版にはBridgeとかは付いてない(元々使ってないので関係ない)
・パッケージ版よりずっと安い!!
・アルファチャネルやトーンカーブは相変わらず(自由には)いじれない

<コンテンツに応じる機能>
すんごい期待してました、正直。デモビデオとかを見てると、まさに魔法のような結果だったので。
実際に幾つかの写真で試して見ました。


結果は、、、、
うーむ、楽チンではあるんですが、出力結果はそれなりです。
背景が森や林などの不規則で細かいパターンの場合には、元々人間の目が判断できないのか、消した跡は分かりにくい感じです。ただし人工物が入るととたんに違和感たっぷりな仕上がりになりますね。

コンテンツに応じた塗りだけを期待してバージョンアップする人には正直やめておいた方が良いかも知れません。そこそこのスキルと根気があればスタンプツールで丁寧に作業した方が明らかに綺麗に仕上がります。

他のフィルタや手軽さを求める人にはかなり便利なツールではあります。
例えば、集合写真機能やスマートブラシなんかは便利に使えそうです。

<個人的なまとめ>
Photoshopが安けりゃそっちを買うんですが、ちょっと高すぎです。
adobeさんにはアルファチャネルとトーンカーブだけなんとかElementsに持ってきてもらえると言うことなし。
でも、値段を考えると良いツールです、ほんとに。

2011年8月18日木曜日

Galaxy Tabでの誤タッチ

GalaxyTabを最近触っていますが、操作面でどうしても気になることがあります。
個人的な意見かもしれませんが、ブラウザなどで妙に間違ったリンクを選んでしまったりする「誤タッチ※」がiOSに比べて多いのです。
※勝手な呼び方です

<まずは図解(クリックして拡大>


○ iOS(例としてiPad)
 タッチ位置は指の先となっており、実際にタブレット端末を持って目で見て指差す感触の位置が選択される。
☓ android(Galaxy Tab)
 実際に画面に触れている指の腹の中心が選択されるような感触で、狙った位置より少し下が選択されることが多い。

ちなみに、iPadなどのiOS端末をお持ちの方は「画面の向きをロック」して、safariなどを使って逆向けに操作してみると、えらく下の位置が選択されてびっくりすると思います。
androidの場合には、逆向けに操作してもあまり違いはないように感じます。

このあたりは、専用のハードとソフトをセットで用意でき「しかも十分にチューニング」しているAppleならではないかと思います。
と、勝手に「さすがApple」と思っているのですが、iOSとandroidの両方の端末を持っている方は同じように感じていないでしょうか?