ある座標からタッチした座標への角度を求める

ある座標(X,Y)から、タッチした座標(location.x,location.y)への角度Rの求め方。

double R = atan2((location.x - X),-(location.y - Y)) * (180 / M_PI);

if (R < 0) {
R += 360;
}

NSDateで日付の計算

NSDate *dateA = [NSDate date]; // 今日
NSDate *dateB = [NSDate dateWithTimeIntervalSinceNow:-5*24*60*60]; // 5日前

NSTimeInterval since;
since = [dateA timeIntervalSinceDate:dateB];

int day = since/(24*60*60);

NSLog(@"%d日", day);

- 結果 -
5日

UIViewの反転

// 上下反転処理
imv.transform = CGAffineTransformScale(imv_hito[i].transform, 1, -1);

// 左右反転処理
imv.transform = CGAffineTransformScale(imv_hito[i].transform, -1, 1);

// 元に戻す
uiv.transform = CGAffineTransformIdentity;

iAdとAdMakerのハイブリッド配信設定

iAdが読み込めなかったとき、AdMakerに切り替える覚書。

まず、双方とも広告が表示できる状況にしてから、
AdMakerの広告のみ、起動時に画面外に追いやっておく。

    AdMaker = [[AdMakerView alloc] init];

    [AdMaker setAdMakerDelegate:self];

    [AdMaker setFrame:CGRectMake(0, 430+50, 320, 50)];

    [AdMaker start];

画面下部への配置の場合はこんな感じ。

そしてiAdの設定を一部変更。

-(void)bannerViewDidLoadAd:(ADBannerView *)banner

{

    [self layoutForCurrentOrientation:YES];

    [AdMaker viewWillDisappear];

    [AdMaker setFrame:CGRectMake(0, 430+50, 320, 50)];

}


-(void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error

{

    [self layoutForCurrentOrientation:YES];

    [AdMaker viewWillAppear];

    [AdMaker setFrame:CGRectMake(0, 430, 320, 50)];

}

これでiAdが読み込めた場合はAdMakerの通信を停止して広告を隠し、
読み込めなかった場合は通信を再開して広告を復帰となる。

…と思う。(^^;)
まだ申請通ってないから分からんケド、
とりあえずテスト環境では問題ないみたい。


変数の値をローカルに保存 - ゲームのセーブとか

// ロード
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; // 取得
comboMax = [ud integerForKey:@"KEY_comboMax"];  // KEY_comboMaxの内容をint型として取得
scoreMax = [ud integerForKey:@"KEY_scoreMax"];  // KEY_scoreMaxの内容をint型として取得

// セーブ
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; // 取得
[ud setInteger:comboMax forKey:@"KEY_comboMax"]; // int型のcomboMaxをKEY_comboMaxというキーで保存
[ud setInteger:scoreMax forKey:@"KEY_scoreMax"]; // int型のscoreMaxをKEY_scoreMaxというキーで保存
[ud synchronize];  // 反映


日本でも始まったようなのでiAd設定してみた

以下のように設定してみたけど、まだ申請中なので間違ってるのかもしれない。


〜 ViewController.h 〜


#import <iAd/iAd.h>

@interface ViewController : UIViewController<ADBannerViewDelegate> {

    UIView *contentView;

    ADBannerView *banner;

}

@property(nonatomic, retain) IBOutlet UIView *contentView;

@property(nonatomic, retain) IBOutlet ADBannerView *banner;

@end



〜 ViewController.m 〜


@interface soukakuViewController()

-(void)layoutForCurrentOrientation:(BOOL)animated;

-(void)createADBannerView;

@end


@synthesize contentView, banner;


- (void)dealloc

{

    [contentView release]; contentView = nil;

    banner.delegate = nil;

    [banner release]; banner = nil;

}


#pragma mark ADBannerViewDelegate methods


- (void)viewDidLoad

{

    if(banner == nil)

    {

        [self createADBannerView];

    }

    [self layoutForCurrentOrientation:NO];

}


-(void)viewWillAppear:(BOOL)animated

{

    [super viewWillAppear:animated];

    [self layoutForCurrentOrientation:NO];

}


-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

{

    return YES;

}


-(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration

{

    [self layoutForCurrentOrientation:YES];

}


-(void)createADBannerView

{

NSString *contentSize;

if (&ADBannerContentSizeIdentifierPortrait != nil)

{

contentSize = UIInterfaceOrientationIsPortrait(self.interfaceOrientation) ? ADBannerContentSizeIdentifierPortrait : ADBannerContentSizeIdentifierLandscape;

}

else

{

contentSize = UIInterfaceOrientationIsPortrait(self.interfaceOrientation) ? ADBannerContentSizeIdentifier320x50 : ADBannerContentSizeIdentifier480x32;

    }

    CGRect frame;

    frame.size = [ADBannerView sizeFromBannerContentSizeIdentifier:contentSize];

    frame.origin = CGPointMake(0.0f, CGRectGetMaxY(self.view.bounds));

    

    ADBannerView *bannerView = [[ADBannerView alloc] initWithFrame:frame];

    bannerView.delegate = self;

    bannerView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleTopMargin;

    

bannerView.requiredContentSizeIdentifiers = (&ADBannerContentSizeIdentifierPortrait != nil) ?

    [NSSet setWithObjects:ADBannerContentSizeIdentifierPortrait, ADBannerContentSizeIdentifierLandscape, nil] : 

    [NSSet setWithObjects:ADBannerContentSizeIdentifier320x50, ADBannerContentSizeIdentifier480x32, nil];

    

    [self.view addSubview:bannerView];

    self.banner = bannerView;

    [bannerView release];

}


-(void)layoutForCurrentOrientation:(BOOL)animated

{

    CGFloat animationDuration = animated ? 0.2f : 0.0f;

    CGRect contentFrame = self.view.bounds;

    CGPoint bannerOrigin = CGPointMake(CGRectGetMinX(contentFrame), CGRectGetMaxY(contentFrame));

    CGFloat bannerHeight = 0.0f;

    

    if(UIInterfaceOrientationIsLandscape(self.interfaceOrientation))

    banner.currentContentSizeIdentifier = (&ADBannerContentSizeIdentifierLandscape != nil) ? ADBannerContentSizeIdentifierLandscape : ADBannerContentSizeIdentifier480x32;

    else

        banner.currentContentSizeIdentifier = (&ADBannerContentSizeIdentifierPortrait != nil) ? ADBannerContentSizeIdentifierPortrait : ADBannerContentSizeIdentifier320x50

    bannerHeight = banner.bounds.size.height

    if(banner.bannerLoaded)

    {

        contentFrame.size.height -= bannerHeight;

        bannerOrigin.y -= bannerHeight;

    }

    else

    {

        bannerOrigin.y += bannerHeight;

    }

    

    [UIView animateWithDuration:animationDuration

                     animations:^{

                         contentView.frame = contentFrame;

                         [contentView layoutIfNeeded];

                         banner.frame = CGRectMake(bannerOrigin.x, bannerOrigin.y, banner.frame.size.width, banner.frame.size.height);

                     }];

}


-(void)bannerViewDidLoadAd:(ADBannerView *)banner

{

    [self layoutForCurrentOrientation:YES];

}


-(void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error

{

    [self layoutForCurrentOrientation:YES];

}


-(BOOL)bannerViewActionShouldBegin:(ADBannerView *)banner willLeaveApplication:(BOOL)willLeave

{

    return YES;

}


-(void)bannerViewActionDidFinish:(ADBannerView *)banner

{

}


- (void)viewDidUnload

{

    self.contentView = nil;

    banner.delegate = nil;

    self.banner = nil;

}

@end


証明書のエラー? - その後2

引き続き例のエラーの件。

warning: Application failed codesign verification.  The signature was invalid, or it was not signed with an Apple submission certificate. (-19011)


小生の場合、プロジェクト名が長すぎると出るみたいなんだけど、
そのまま申請してみたら通った。

バグ?

AudioToolboxの再生遅延対策

AudioToolboxを使ってサウンドを再生すると、初めだけ再生が遅延する。

これをどうやって回避すれば良いものか、しばらく悩んでたんだけど、
非常に単純な解決法を教えてもらった。

で、どうするかと言うと、

「無音のサウンドファイルを起動時に鳴らす。」

だけ。

あー、なるほど! と、聞けば納得の内容。
思いつかなかった自分のヘボさに少々ヘコむ…。


証明書のエラー? - その後

例のエラーの原因をイロイロ調べてみたんだけど、

warning: Application failed codesign verification.  The signature was invalid, or it was not signed with an Apple submission certificate. (-19011)


どうやらアプリ名、とゆーかプロジェクト名?が長すぎると出るみたい。

これって正しいエラーなんだろうか?
プロジェクト名の文字数って制限あったの!?

でもまぁ、現状そのまま申請中だし、待っとこ。

証明書のエラー?

出たぞ。
久しぶりの原因不明エラー…。

warning: Application failed codesign verification.  The signature was invalid, or it was not signed with an Apple submission certificate. (-19011)


プロビジョニングファイルがオカシイんじゃねーの?的な事らしーけど、
別に間違ってないと思うんだよね。

で、しばらく悩んだ結果、
アップロードは出来るみたいだから、とりあえず申請に出してみた。(^^;)

ってワケでアップルさん、ダメ出しヨロピコ。



ロリポップ!レンタルサーバー

写真素材とか販売なう!


search this site.

calendar

S M T W T F S
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
<< July 2017 >>

selected entries

categories

archives

links

profile

others

mobile

qrcode

powered

無料ブログ作成サービス JUGEM