2013年6月14日金曜日

perlのREPL近状



Perl5 で irb 相当のことをする方法、すなわち REPL をする方法
のようにデバッガを利用する方法や、Eval::WithLexicalsのtinyreplでレキシカル変数を保存する方法が紹介されているが、

Reply is awesome!
doyさんがRelyをリリース。

~/.replrcに設定を書くことで各種pluginが設定できる。
tokuhiromさんのブログのようにやったら、
$x = 3;
$x + 1; って書いても$x = 3が保存されてない。

Reply::Plugin::FancyPromptを入れたら同じ動作になった。表示もtokuhiromさんのブログのように0>ってナンバーが付いてますね。

コマンドライン上で^Pや^HになっちゃうのはReadLineプラグインだと上手く動かなかった。
とりあえずrlwrapを使っておく。

port install rlwrap
rlwrap reply



mac os用のreadlineだとまたしてもtokuhiromさんの
OSX ユーザーのために Term::ReadLine::EditLine をだした。
があるけれど、replyで動かないっぽい。

追記


デフォルトでpluginがいろいろ入るようになったみたい




2013年6月3日月曜日

Storyboardで定義したviewを再帰的に使用する



コードからStoryboardを取得すると、Storyboardで設定したsegueなどもそのまま利用できる



UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *myViewController = [storyboard instantiateViewControllerWithIdentifier:@"ViewIdentifer"];





assetLibraryで保存処理時にエラー



複数のファイルを保存するとき、assetLibraryのアクセスが非同期なせいで落ちる。
他に方法があるのかもしれないが、再帰で処理。



- (void)save:(NSMutableArray *)images {

UIImage *img = [images lastObject];

if (img == nil) {
return;
}

if (self.assetLibrary == nil) {
NSLog(@"assetLibrary is nill");
return;
}

[self.assetLibrary writeImageToSavedPhotosAlbum:img.CGImage
metadata:nil
completionBlock:^(NSURL *assetURL, NSError *error) {
[images removeLastObject];
if ( [images count] == 0 ) {
// 完了メッセージ出したりとか
}
[self save:images];
}
];
}





iOS6で画面回転を抑制



以下のメソッドを定義すればいいが、全部に適用したかったので、UIViewControllerのカテゴリを作成して、pchでimport



- (BOOL)shouldAutorotate
{
return NO;
}

- (NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskPortrait;
}





2013年6月2日日曜日

TabBarとToolBarの入れ替え



TabBar非表示


ググって出てくるコードだと、タブバーを再表示させたときにボタンがクリックできなくなっていた。
自分の場合、最初の状態が広告をタブバー上部に座標を指定して表示させていたので、elseで再表示時に広告とタブバーが重なっていたようだ。



- (BOOL) hideTabBar {

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.4];

for (UIView *view in self.view.subviews) {

// 広告はスキップ
if ( [view isKindOfClass:[NADView class]] ) {
continue;
}

CGRect _rect = view.frame;

if ( [view isKindOfClass:[UITabBar class]] ) {
_rect.origin.y = hiddenTabBar ? 431 : 480;
}
else {
_rect.size.height = hiddenTabBar ? 431 : 480;
}

[view setFrame:_rect];
}
[UIView commitAnimations];

hiddenTabBar = !hiddenTabBar;
return hiddenTabBar;
}



ToolBarと入れ替え



- (IBAction)toggleBar:(id)sender {
UITabBarController *tabBarController = self.tabBarController;

BOOL tabBarIsHidden = [tabBarController hideTabBar];
[self.navigationController setToolbarHidden:!tabBarIsHidden];
}



Storyboardでは微妙な操作が要求されるのかtabBarの上にtoolBarを置くことができなかったので、コード側で作成した。



// toolBarのボタン作成,配置
UIBarButtonItem *hogeBtn = [[UIBarButtonItem alloc] initWithTitle:@"HOGE"
style:UIBarButtonItemStyleBordered
target:self
action:@selector(hoge:)
];
NSArray *items = [NSArray arrayWithObjects:hogeBtn,nil];
[self setToolbarItems:items];