バージョン管理って何だっけの図
サラ・ルイス 「あと一歩を大切にしよう」
presentViewControllerで元の画面も見えるようにするのがうまくいかない
iPhoneのキーボードが表示されるように、自分の作ったViewControllerを表示させるやつです。
ViewControllerを作成し、そのViewControllerのViewのBackgroundをClearColorにしてpresentViewControllerすれば行ける…と思ったのですが、トランジション中は透けて見えるのに切り替わったとたんに画面が消えてしまいます。
https://developer.apple.com/jp/devcenter/ios/library/documentation/ViewControllerPGforiOS.pdf:title=iOS ViewController プログラミングガイド]を見ると、
View Controllerが表示される際、iOSは表示コンテキストを検索します。検索の最初の対象は、表示す る側のView Controllerで、そのdefinesPresentationContextプロパティを参照します。このプロパ ティ値がYESであれば、表示する側のView Controllerに表示コンテキストが定義されています。そうで なければ、View Controller階層を上に向かって順次たどり、YESを返すView Controllerが見つかるか、 ウインドウのルートView Controllerに到達するまで続けます。
あるView Controllerが表示コンテキストを定義する場合、これは表示スタイルも定義します。通常、 表示される側のView Controllerは、modalTransitionStyleプロパティで表示形態を判断します。 definesPresentationContextがYESであるView Controllerは、 providesPresentationContextTransitionStyleもYESとすることができます。 providesPresentationContextTransitionStyleがYESであれば、iOSは表示コンテキストの modalPresentationStyleを調べて、新しいView Controllerをどのように表示するか判断します。
となってるので、遷移元のViewControllerで
self.definesPresentationContext = YES; self.providesPresentationContextTransitionStyle = YES; self.modalPresentationStyle = UIModalPresentationCurrentContext; [self presentViewController:vc animated:YES completion:nil];
とすればちゃんと透過してくれそう…なのですが。残念ながらこれはうまく行きませんでした。
色々はまったあげく、結局グーグル先生一押しの http://stackoverflow.com/questions/12736394/uimodalpresentationcurrentcontext-with-transition に答えが有りました。日本語の情報を優先して見てたのが敗因でした…
was able to accomplish this by setting modalPresentationStyle = UIModalPresentationCurrentContext on the rootViewController of my UIWindow, IF I haven't presented any new full screen viewControllers on top of this rootViewController. I did something like this:
UIViewController *rootViewController = [UIApplication sharedApplication].delegate.window.rootViewController; rootViewController.modalPresentationStyle = UIModalPresentationCurrentContext; [self presentViewController:vc animated:YES completion:nil];
rootViewControllerが放してくれないようです。そいつのmodalPresentationStyleを変えてやってみたらうまいこと行きました。
ただ、この方法だとうまくトランジションがかからないようです。。。
うーむ、もう一息。
[もう少し調査が必要そうです。
もう3年かぁ
過去のブログを見ていて、"10分でコーディング"という記事があったので、かつ内容を完全に忘れていたので、あらためてチャレンジ。
問題はこちら。
自分もやっていたのを思い出しました。
懐かしかったのでやってみました。
def deal(member, cards) { def result = (0..<member).collect{""} if (cards.length() < member) return result int rest = cards.length() % member cards = cards[0..-(1+rest)] cards.eachWithIndex{c, i->result[i%member]+=c} return result } assert deal(3, "123123123") == ["111", "222", "333"] assert deal(4, "123123123") == ["12", "23", "31", "12"] assert deal(6, "012345012345012345") == ["000", "111", "222", "333", "444", "555"] assert deal(4, "111122223333") == ["123", "123", "123", "123"] assert deal(1, "012345012345012345") == ["012345012345012345"] assert deal(6, "01234") == ["", "", "", "", "", ""] assert deal(2, "") == ["", ""]
また10分ぎりぎり、しかもなんか身に覚えが…
悔しいのでやり直しました。
String.metaClass.toMap = {-> def map = [:] delegate.eachWithIndex{e, i->map[i]=e} return map } def deal(member, cards) { cards[0..<(((int)cards.length() / member) * member)].toMap().inject((0..<member).collect{""}){l,k,v->l[k%member]+=v;l} } assert deal(3, "123123123") == ["111", "222", "333"] assert deal(4, "123123123") == ["12", "23", "31", "12"] assert deal(6, "012345012345012345") == ["000", "111", "222", "333", "444", "555"] assert deal(4, "111122223333") == ["123", "123", "123", "123"] assert deal(1, "012345012345012345") == ["012345012345012345"] assert deal(6, "01234") == ["", "", "", "", "", ""] assert deal(2, "") == ["", ""]
30分もかかってしまった…
追記:
今回もgroupByは思いつきもしませんでした…やっぱり進歩無かったです
ファイル名の連番の桁数をそろえるスクリプト
Macは、連番の数字の桁数が違って
- file1.txt
- file2.txt
- file3.txt
- …
- file101.txt
- file102.txt
- …
とかなっていても番号順に並べてくれるのだけれど、JavaのListFilesは文字列順に
- file1.txt
- file10.txt
- file100.txt
- …
とかと並べてしまうのでちょっと具合が悪かった。そこで、ファイル名の連番の桁をそろえて
- file001.txt
- file002.txt
- file003.txt
- …
- file101.txt
- file102.txt
と並べるスクリプトを作成。
new File('').listFiles({it.name ==~ /[^\d]*\d{1,2}\.[^\.]*/} as FileFilter).each { it.renameTo(new File(it.parentFile, it.name.replaceAll(/\d{1,2}/){('0'*(3-it.size())) + it})) }
今回は3桁だったので1~2桁の数字の後に拡張子が来ているファイルについて、数字の長さが3に満たない分0を足したもので数字部分を置き換え。
「クロージャ as インターフェイス」とか「replaceAll(正規表現){変換処理}」とか、groovyのかゆいとこに手が届く感が結構出た感じだったのでメモ。