2013年12月23日月曜日

012-ロード中にぐるぐる回すインディケーター( UIActivityIndicatorView, UIActivityIndicatorViewStyleWhiteLarge)

ロード中や読み込み時に表示するグルグル回すインディケ−タの使い方を記述します。

■生成
UIActivityIndicatorView* indicator = [[UIActivityIndicatorView alloc] init];

■オブジェクトの場所を指定
[indicator型 setFrame:CGRectMake(0, 0, 100, 100)];

■くるくる回す
[indicator型 startAnimating];

■くるくる回さない
[indicator型 stopAnimating];

■回っているかの判定
[indicator型 isAnimating
返し値はBOOL値

■ぐるぐるが回っていない時にぐるぐるを非表示時にするかの設定
[indicator型 setHidesWhenStopped:(BOOL)]
YES,NOで設定。true falseでは駄目だった

■ぐるぐる停止時の表示を取得
[indicator型 hidesWhenStopped]
返し値はBOOL値

■ぐるぐるの大きさの指定
indicator型.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhiteLarge;

定数
UIActivityIndicatorViewStyleWhiteLarge
白色、大きめ

UIActivityIndicatorViewStyleWhite
白色

UIActivityIndicatorViewStyleGray
灰色



■サンプルソース
#import "ViewController.h"

@interface ViewController (){
    // アクティビティインジケータ変数
    UIActivityIndicatorView* indicatorLarg;
}

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    //画面背景を黒色にする
    [self.view setBackgroundColor:[UIColor blackColor]];

    //ぐるぐる回るポジション
    CGRect rect                            = CGRectMake(0, 0, 100, 100);
    
    //ぐるぐる回るインディケータの生成
    indicatorLarg = [[UIActivityIndicatorView alloc]initWithFrame:rect];
    
    // アクティビティインジケータのスタイルをセット :今回は大きめのサイズ
    indicatorLarg.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhiteLarge;
    
    // くるくるをまわす
    [indicatorLarg startAnimating];
    // UIActivityIndicatorViewのインスタンスをビューに追加
    [self.view addSubview:indicatorLarg];
    
    //タッチジェスチャーを取得
    UITapGestureRecognizer* tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapGesture:)];
    //タッチジェスチャーをビューに設定
    [self.view addGestureRecognizer:tapRecognizer];
}

//タッチされた時の判定
- (void)handleTapGesture:(UITapGestureRecognizer *)sender {
    //ぐるぐる回っているかの判定
    if ( [indicatorLarg isAnimating] ){
        //ぐるぐるSTOP!!
        [indicatorLarg stopAnimating];
        
        //ぐるぐるSTOP時に隠すか止まったままにするか
        bool bIsHide = [indicatorLarg hidesWhenStopped];
        [indicatorLarg setHidesWhenStopped:!bIsHide];
        
    }else{
        //ぐるぐる回っていなかったら、回す
        [indicatorLarg startAnimating];
    }
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}


@end


■実行結果


こんな感じになります。

タッチすると、ぐるぐるが止まって、
もう一回タッチすると動きだします。


このロード中のぐるぐるの正式名称は何て言うんですかね??

2013年10月27日日曜日

古いXcodeをインストール

自分は勇者タイプなので、 OSやソフトに新しいバージョンがあると果敢に挑みます。

だがしかし、
適応能力がいまひとつのために新しいバージョンに付いていけない事があります。
今回はXcode5にしたものの、iOS7化対応に付いていけなくて
。。。。。
そんな時のために
 Xcodeのバージョンを複数もつ方法を紹介します。




【Finder】→【Xcode】→【右クリック】→【パッケージの表示】→【_MASReceipt】のフォルダ名を変更

これで、他のバージョンのXcodeが上書きされなくります。


https://developer.apple.com/downloads/index.action#

ここで、xcodeで検索すれば、上書きしないでインストールできます。

2013年10月13日日曜日

Xcode5 電波情報などのステータスバーを消す(View controller-based status bar appearance)


 [ UIApplication sharedApplication ].statusBarHidden = YES;

今まではこのソースで消せたのですが。。

Xcode5のせいかiOS7のせいか消せなくなりました。。。。


格闘する事、10,000時間。。。。






Keyのところに+をクリックして、

View controller-based status bar appearance

Type を Boolean

Value を NO


にすると、

 [ UIApplication sharedApplication ].statusBarHidden = YES;

のソースが利くようです。

あー、面倒だ

2013年9月20日金曜日

Appleから The bundle does not contain an app icon for iPhone

The bundle does not contain an app icon for iPhone / iPod Touch of exactly '120x120' pixels, in .png format

アプリをアップロードしたら、こんなエラーが出ました。。


アプリのアイコン120×120が必要らしいです。



けど、この画面には120×120をはめる場所がなくて。。。
あたふたする事、10時間

Summaryタブから、Infoタブに遷移して
icon_filesに新しいitemを作り120×120の画像を
入れるとOKです。





iOS7から、アイコンが120×120になるのですかね??

2013年8月25日日曜日

iconをテカらせない、ツヤ消し

iconがテカるのがいやなので、
テカらせない方法を探していたのですが、

検索ワードのセンスがなかったのか、
なかなかお目当てのページが見つかりませんでした。。。

■方法


Icon already includes gloss effects
この値をBoolean型のYESにすると完了です。
「アイコンはもうテカテカです。」
という意味らしいです。

[Icon files]→[Primary Icon]の中に作ってね!!!!


2013年7月31日水曜日

JSON(NSJSONSerialization)

Objective-CでJSONを使いたかったので、少し勉強してみました。


NSDictionary *jsonParser = [NSJSONSerialization JSONObjectWithData:WebApiから取得した文字列のデータ型 options:NSJSONReadingAllowFragments error:nil];


こんな感じで、Dictionaryに格納したら、後はDictionaryをガンガン使っていけばいいだけです。

■例

{"resulr":"true","item_list":{"item_1":"apple","item_2":"banana","item_3":"melon"}}

こんな、文字列をWebから貰ったとします。。


    //文字列型をデータ型に型変更
    NSData       *data = [string dataUsingEncoding:NSUTF8StringEncoding];

    //ディクショナリに入れる
    NSDictionary *jsonParser = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
  
    //resultを取得
    NSDictionary *next = [jsonParser objectForKey:@"result"];
    //LOG
    NSLog(@"%@", [jsonParser objectForKey:@"result"]);
    
    //深めの階層も大丈夫!!
    NSDictionary *country = [jsonParser objectForKey:@"item_list"];
    NSLog(@"%@", [jsonParser objectForKey:@"item_list"]);
    
    //取得したい値を取得
    NSDictionary *item = [country objectForKey:@"item_1"];
    NSLog(@"%@", [country objectForKey:@"item_1"]);



■結果


2013-07-31 01:59:01.046 jsontest[678:c07] {"result":"true","item_list":{"item_1":"apple","item_2":"banana","item_3":"melon"}}
2013-07-31 01:59:01.048 jsontest[678:c07] true
2013-07-31 01:59:01.048 jsontest[678:c07] {
    "item_1" = apple;
    "item_2" = banana;
    "item_3" = melon;
}
2013-07-31 01:59:01.048 hidouki[678:c07] apple


こんな感じになりました。
そもそもDictionary型をちゃんと理解していないので、
こんな使い方でいいのかわかりませんが。。。。
とりあえずは、APIの戻り値をさばけました。。

2013年6月30日日曜日

アプリの表示固定( orientations)

アプリを端末の向きに依存させたくない時、ありませんか??

横固定だったり、縦固定だったりと

そんな時は

対象のプロジェクトをクリック→TARGET→Summary


Supported Interface Orientations
で選びます。
可能な画面表示を選びます。

黒っぽいのが選択中ってことです。

Portrait              :縦画面OK
UpsideDown    :上下反転OK
LandScapeLeft :横表示のボタン左側OK
LandScapeRight :横表示のボタン右側OK

開発中に特別に画面の横対応をしていないのなら、
縦画面の左2つを選択しておくといいかなとおもいます。


反対に画面の横対応しかしていないなら、
右2つを選択していればだいたいOKです。




2013年6月29日土曜日

なうい 配列の書き方

今日職場のおじいちゃんに
「お前のコーティングの書き方は古い!!」

と言われちゃいました。。。

聞くところによると、
iOS 10.5
以前と以降で推奨される、
書き方がいろいろと変わっていました。


とりあえず、今日調べたところを書きます。

■配列の作成

//  NSArray* oCountryArray = [NSArray arrayWithObjects:@"スペイン",@"イングランド",@"イタリア",@"ドイツ",@"オランダ",nil];
    NSArray* oCountryArray = @[@"スペイン",@"イングランド",@"イタリア",@"ドイツ",@"オランダ"];



上が古くて下が新しいです。

基本的にはスッキリン子しました。
また、nilがなくなったのが個人的にはうれしいかな。

■配列の取り出し

//        NSString* aLabel = [oCountryArray objectAtIndex:_cellCount];
        NSString* aLabel = oCountryArray[_cellCount];


これもシンプルになっています。
他のjavaとかと同じ感じですね。

他にも見つけたら、載せます。

2013年6月16日日曜日

エラー error: failed to attach to process ID 0


error: failed to attach to process ID 0


何のエラーか、よくわからなかったけど。。

どうやら、シミュレータのエラーのようです。

シミュレータ内のデータが消えてもいいのなら、




コンテンツと設定をリセットを選択。。

2013年5月17日金曜日

エラー error: PCH file built from a different branch


error: PCH file built from a different branch 


XCODEのバージョンアップ後に発生!!

プロジェクトをクリーンしたら、問題解決

2013年5月6日月曜日

011-Foundation(フレームワーク, import)


Foundationは文字列や配列の処理、HTTP通信などの基本クラスを集めたフレームワークです。
クラスも多々ありますが、有名どころを下記にしるします。
リンク先はリファレンスになっております。

■代表的なクラス

NSArray  配列を扱うクラス
NSDate   日時を扱うクラス

NSString 文字列を扱うクラス
NSTimer  時間処理を行うためのクラス


■Foundationフレームワークの使い方
作成したプロジェクトの「Frameworks」に「Foundation」があるかの確認して見ましょう


■.pchファイル
#import <Availability.h>

#ifndef __IPHONE_5_0
#warning "This project uses features only available in iOS SDK 5.0 and later."
#endif

#ifdef __OBJC__
    #import <UIKit/UIKit.h>
    #import <Foundation/Foundation.h>
#endif



#import <Foundation/Foundation.h> が存在していれば、
どのクラスでもわざわざ各クラスでimportしなくても「Foundation」のフレームワークが利用できます。

2013年5月5日日曜日

objectie-c エスケープ文字

エスケープ文字で改行や、タブの文字列もコントロールできるようにしましょう

シングルクォーテーション
@"\'"

ダブルクォーテーション
@"\""

改行
@"\n"

タブ
@"\t"

バックスラッシュ
@"\\"


【例】
//改行でスプリット
NSArray* sText = [sHTML componentsSeparatedByString:@"\n"];

//こんな文字列で始まっていたら
if ( [str hasPrefix:@"<a class=\"ts_left\" href=\""] ){







2013年4月24日水曜日

012-NSString(Foundation)

NSStringクラス

生成
NSString* 変数名 = @"文字列";

NSString変数名 = [[NSString alloc] initWithString:@"文字列"];

NSString* 変数名 = [NSString stringWithFormat:@"文字列"];

こんな感じで生成できます。


■指定した文字かの判定

NSString* sText = @"比較先";
[sText isEqualToString:@"比較もと"];

結果はBooleanで返されます。
今回の出力結果は偽になります。

■指定した文字列ではじまっているかの判定

NSString* sText = @"比較先";
[sText hasPrefix:@"比較"];

結果はBooleanで返されます。
今回の出力結果は真になります。

■指定した文字列で終わっているかの判定

NSString* sText = @"比較先";
[sText hasSuffix:@"較先"];


結果はBooleanで返されます。
今回の出力結果は真になります。

■文字列の後ろから返す

NSString* sText = @"比較先";
[sText substringFromIndex:int型];

指定した文字列から最後までの文字列を返します。


[sText substringFromIndex: sText.length - 1]

こんな感じにすると、sTextの最後の文字列を返します。
-1を-2にすると、後ろから2文字目を全て返します。。。


2013年4月7日日曜日

010-ピッカーの表示(UIPickerView)

ピッカーの使い方に関して。。

iPhone使ってる人はピッカーで何の事かわかるのすかね??

ドラムロールから、任意のステータスを選択するあれです。

では、例文です。

■サンプルソース

h.ファイル


#import <UIKit/UIKit.h>

@interface ViewController : UIViewController <UIPickerViewDelegate,UIPickerViewDataSource>{
    NSArray*       aItemList;
    UIPickerView*  oPicker;
    UILabel*       oLabel;
}

@end


m.ファイル

#import "ViewController.h"
@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
    [self showPicker];
    [super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (void)showPicker {
    //ピッカーにアイテムを格納
    aItemList = [[NSMutableArray alloc] initWithObjects:@"リンゴ",@"バナナ",@"マンゴー",@"パパイア", @"ドリアン",nil];
    
    // ピッカーの生成
    oPicker = [[UIPickerView alloc] init];
    //中央に表示
    oPicker.center = self.view.center;
    oPicker.showsSelectionIndicator = YES;
    oPicker.delegate = self;
    oPicker.dataSource = self;
    //画面に追加
    [self.view addSubview:oPicker];
    
    //ラベルの生成
    oLabel = [[UILabel alloc] init];
    oLabel.frame = CGRectMake(0,0,200,50);
    oLabel.text  =@"何が選ばれるのだろう";
    //画面に追加
    [self.view addSubview:oLabel];

}

//区切りの数(コンポーネント)
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
    return 1;
}

//コンポーネントの行数を返す
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
    return [aItemList count];
}

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
    return [aItemList objectAtIndex:row];
}

//選択完了時に呼ばれる
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
    //選択行を返す
    NSInteger id = [pickerView selectedRowInComponent:0];
    oLabel.text  = [NSString stringWithFormat:@"%@",aItemList[id]];
}

@end


■実行結果




実行すると、
選択した項目が文字列で出力できていることが確認できると思います。

hファイルでデリゲートの準備をし忘れないように!
@interface ViewController : UIViewController <UIPickerViewDelegate,UIPickerViewDataSource>{

mファイルの生成時にデリゲートが呼ばれます。
oPicker.delegate = self;
oPicker.dataSource = self;


//選択完了時に呼ばれる
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
この関数を作成すると、選択している項目を取得できます。


正直UIPickerViewはコードで全部書くのはしんどかったです。
はい。

2013年4月6日土曜日

アイコン画像・起動画面(App Icons, Launch Images)

iPhoneアプリに必要な画像のサイズを適当にメモっておきます。
リリース前にはそろえましょう!!

■アイコン(App Icons)
・サイズ(単位はpx)
  57×57
  114×114  Retina
・保存形式
  png

■起動画面(Launch Images)

・サイズ(単位はpx)
  320×480
  640×960   Retina3.5
  640×1136 Retina3.5
・保存形式
  png







2013年3月10日日曜日

ビルドエラー


Code Sign error: A valid provisioning profile matching the application's Identifier '' could not be found



このエラーが出たときは、



この画面の「Bundle identifer」に修正が必要です。

「Organizer」画面の「App identifer」の最初のカンマまでのよくわからない英数字を
除いた文字列が「Bundle identifer」です。









Code Sign error: No unexpired provisioning profiles found that contain any of the keychain's signing certificates







このエラーがでたら、
「Code Signing」の「Release」をiOS Distributionにすると、
通りました。




Icon specified in the info plist  not found under the top level app wrapper:



こんなエラーのときは


itemに空の値が入っていないか確認してください。

空が入っていた場合には、削除しちゃえばOK!!

2013年2月16日土曜日

シミュレータがいきなり使えなくなった(No provisioned iOS devices are available with a )

Code Sign error: The identity 'iPhone Developer' doesn't match any valid, non-expired certificate/private key pair in your keychains



No provisioned iOS devices are available with a compatible iOS version. Connect an iOS device with a recent enough version of iOS to run your application or choose an iOS simulator as the destination.





こんなエラーがでて、あたふたしました。

ググっても全然わからない!!

Developer登録とかしていないし。。。

証明書とか作成した記憶もない。。。

とりあえず、シミュレータが起動する他のプロジェクトと比較した結果。。。





このラベル??がiOS Deviceになっていたので、iPhoneを選択すると、
問題解決いたしました。






原因はわかりませんが、自分はこの問題2回目で、
やっと解決できました。。

前回このエラーが出た時は1からプロジェクトを再作成しました。
はい。



2013年2月12日火曜日

ould not load NIB in bundle: 'NSBundle

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle 


というエラーが出現!!

storyboardが良くないときにおこるエラーのようです。

うーん。。

わからない

2013年2月8日金曜日

Apple Mach-O Linker Error


symbol not found for architecture i386



"_glBindFramebufferOES", referenced from: Apple Mach-O Linker Error こんなエラーが出てしまったら、 フレームワークの追加が必要かもしれません。。
このページで追加させましょう!!

Unknown type name "", did you mean

またまた、エラーです。


Unknown type name "変数名", did you mean 候補の変数名


こんなエラーが出てしまいました。
did you mean ?

この優しさが逆につらいです。

変数名付けるのが下手な自分が全て悪いのですが。

原因はだいたいimportが原因です。


失敗 例)

dominica.hファイル

#import "kongo.h"


kongo.hファイル

#import "dominica.h"


このように2つのファイルで参照しあうと、エラーとなります。
循環参照??


成功 例)


dominica.hファイル

@Class kongo;

dominica.mファイル

#import "dominica.h"
#import "kongo.h"





kongo.hファイル

@Class dominica;

kongo.mファイル



#import "dominica.h"
#import "kongo.h"





no visible @interface for declares the selector

no visible @interface for declares the selector

関数にこんな赤色のエラーが出ました。


ググってもヤホっても見つからない!!


よくコードをみたら解決!!

関数の引数の渡し方に問題がありました。


hファイルで宣言した情報(引数の型とか引数名)は全て書かないと行けないのですね。

VB感覚で省略可能かと思ってました。




2013年2月4日月曜日

used as the name of the previous parameter rather than as part of the selected

used as the name of the previous parameter rather than as part of the selected


こんなワーニングメッセージが出るようになりました。。。。

ワーニングなので、気にしなくてもいいのですが、

何か一方的に注意されるのもしゃくなので、修正してみました。

ポイントは
関数定義の方法でした。

修正前

-(void)Particle:(int) iCap:(int) iSpan;

修正後
-(void)Particle:(int)iCap intSpan:(int)iSpan;



引数名が増えている??
とか、思ったかたもいると思いますが、そうではなくて

-(void)メソッド名:(引数型)引数名 引数説明:(引数型)引数名;

引数説明という項目が新しく増えたらしいです。
個人的には引数の説明なんて、初めて聞いたのですが、
Objective-CとかCでは有名な儀式的なものなのでしょうか?

使い方はよくわからないのですが、とりあえず
これで、ワーニングは消えました!!

前向きに考えると、きっと引数説明とはすごい便利なものだと思うので。。。。


2000円札くらい。


これから管理している全てのアプリのソースの修正でも
してみます。。。

2013年2月3日日曜日

Missing context for method declaration


Missing context for method declaration


こんなエラーが出たときは


#import "Renderer.h"
@implementation Renderer
@synthesize glViewController:


上記3つの順番を変えてみると、うまくいく事があります。

implementation忘れとかでも、出るエラーです。