App Develop

[objective-c]UIImageを2枚重ねた状態をUIImageにする

UIImageを2枚重ねた状態をUIImageにする

-(UIImage*)getWImage:(UIImage*)bottomImage frontImage:(UIImage*)frontImage{
    int width = bottomImage.size.width;
    int height = bottomImage.size.height;
    
    CGSize newSize = CGSizeMake(width, height);
    UIGraphicsBeginImageContextWithOptions(newSize, NO, 1.0);
    [bottomImage drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
    [frontImage drawInRect:CGRectMake(0,0,newSize.width,newSize.height) blendMode:kCGBlendModeNormal alpha:1.0];
    
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    
    return newImage;
}

[objective-c]EGODatabase #1 テーブル作成

EGODatabaseはスレッドセーフなSQLiteのラッパーです。

-(EGODatabase*)getDB{
    EGODatabase* database = [EGODatabase databaseWithPath:[NSHomeDirectory() stringByAppendingPathComponent:@"Documents/database.db"]];
    return database;
}
EGODatabase* database=[self getDB];
NSString*sql=[NSString stringWithFormat:@"create table if not exists '%@' (id int,gno int,type int,filename varchar);",tableName];
EGODatabaseResult*result= [database executeQuery:sql];
if (result.errorCode) {//failed
        
}else{//success
        
}

参考サイト
enormego/egodatabase · GitHub
https://github.com/enormego/egodatabase

[objective-c]Documentsフォルダの指定ファイルを削除

-(void)removeFileByPath:(NSString*)path{
    NSFileManager *fm = [NSFileManager defaultManager];
    if (![fm fileExistsAtPath:path]) {
        NSLog(@"no file");
        return;
    }
    NSError *error=nil;
    [fm removeItemAtPath:path error:&error];
    if (error!=nil) {//failed
        NSLog(@"failed to remove %@",[error localizedDescription]);
    }else{
        NSLog(@"Successfully removed:%@",path);
    }
}
NSString* path=[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
path=[path stringByAppendingPathComponent:@"test.png"];
[self removeFileByPath:path]; 

[objective-c]Documentsフォルダのファイル名一覧を出力

-(NSArray*)fileNames:(NSString*)fileName {
    NSString* path=[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
    path=[path stringByAppendingPathComponent:fileName]; 
    return [[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:nil];
}
-(void)traceAllFiles{
    NSArray*t=[self fileNames:@""];
    NSLog(@"traceAllFiles %@",[t description]);
}
[self traceAllFiles];

[objective-c]UIImageをpng形式ファイルで保存

カメラロールにpngで保存

-(void)savePhotoPng:(UIImage*)orizinalSizeImage{
    NSData *imageData = UIImagePNGRepresentation(orizinalSizeImage);
    UIImage *pngimage = [UIImage imageWithData:imageData];
    UIImageWriteToSavedPhotosAlbum(pngimage, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
}

Documentsフォルダにファイルとして保存

-(NSString*)getPathByFileName:(NSString*)fileName{
    NSString* path=[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
    return [path stringByAppendingPathComponent:fileName];
}
NSString*path=[self getPathByFileName:@"test.png"];
NSData*d=UIImagePNGRepresentation(uiimg);
if ([d writeToFile:path atomically:YES]) {
    NSLog(@"save OK - %@",path);
}else{
    NSLog(@"save NG - %@",path);
}

[objective-c]modalPresentationStyle & modalTransitionStyle

iPadアプリでは、UIViewControllerをpresentModalするときに
modalPresentationStyleとmodalTransitionStyleを設定することで
modalViewの出し方を変えることが出来ます。

modalPresentationStyle

UIModalPresentationFullScreen

UIModalPresentationPageSheet

width:自由
height:自由
何も指定しないとFullScreen
指定のしかた

myUIViewController.modalPresentationStyle=UIModalPresentationPageSheet;
[self presentModalViewController:myUIViewController animated:YES];
myUIViewController.view.superview.frame=CGRectMake(0, 0, 768,300);
myUIViewController.view.superview.center=CGPointMake(768*0.5, 300);

UIModalPresentationFormSheet

何も指定しないと
width:540px
height:620px

UIModalPresentationCurrentContext

親ViewControllerと同じWidth,Height

modalTransitionStyle

UIModalTransitionStyleCoverVertical
下から出てくる

UIModalTransitionStyleFlipHorizontal
画面が回転する

UIModalTransitionStyleCrossDissolve
次の画面がフェードインする

UIModalTransitionStylePartialCurl
ページカール

[Xcode]NSLocalizedStringでローカライズ

iPhoneアプリをローカライズ(多言語対応)するときNSLocalizedStringを使うと便利です。
1.まずResourcesなど右クリックして「New File」をクリック
2.ResourceのStrings Fileを選択
3.ファイル名:Localizable.stringsで保存
4.Localizable.stringsを選択してXcodeの右カラムのLocalizationの「+」から言語を選択します。
5.各言語のLocalizable.stringsには下記のようにテキストを設定します。

Localizable.strings(English)

hogeText="hoge";

Localizable.strings(Japanese)

hogeText="ほげ";

6.使うときはこう

NSString*s=NSLocalizedString(@"hogeText", nil);

[objective-c]UIActionSheet

アクションシートの出し方です。
アクションシートというのはこういうやつです。

まずデリゲートの設定をします。

@interface HogeViewController : UIViewController <UIActionSheetDelegate> {

そしてHogeViewController.mに下記コードを記述してsetActionSheetで実行します。

//アクションシートのボタンを押した直後
-(void)actionSheet:(UIActionSheet*)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
    NSLog(@"clickedButtonAtIndex %d",buttonIndex);
    switch (buttonIndex) {
        case 0://選択1
            
            break;
        case 1://選択2
            
            break;
        case 2://選択3
            
            break;
        case 3://キャンセル
            
            break;
        default:
            break;
    }
}
//ボタンを押してアクションシートが下へ消えたとき
-(void)actionSheet:(UIActionSheet*)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex{
    NSLog(@"didDismissWithButtonIndex %d",buttonIndex);
}
-(void)setActionSheet{
    UIActionSheet *as = [[UIActionSheet alloc] init];
    as.delegate=self;
    as.title=@"アクションシート";
    [as addButtonWithTitle:@"選択1"];
    [as addButtonWithTitle:@"選択2"];
    [as addButtonWithTitle:@"選択3"];
    as.cancelButtonIndex=3;
    [as showInView:self.view.window];
    [as release];
}

[objective-c]UIViewで表示されている状態をUIImageにする

UIViewに表示した状態をUIImageにすることが出来ます。
UIImageにすればカメラロールに保存したり、SNSにアップロード出来ます。

- (UIImage *)screenImage:(UIView *)view{
    UIImage *screenImage;
    UIGraphicsBeginImageContext(view.frame.size);
    [view.layer renderInContext:UIGraphicsGetCurrentContext()];
    screenImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return screenImage;
}