SKScene で、view が取り除かれる時に呼ばれるメソッドは・・・

SKScene で、View が表示される時に呼ばれるメソッドは、

-(void)didMoveToView:(SKView *)view

ですが、その view が取り除かれる時に呼ばれるのはなんでしょう。

取り除かれるというのがよくわかんない表現になっていますが、結局のところ、別の view を表示しようとしてその view を消そうとした時に呼ばれるメソッドです。

別の view と言うと、今書いているプログラムとの整合も悪くなってくるので、didMoveToView が呼ばれる前に呼ばれるメソッドといった方が的を得ているでしょうか。

昔 4D のプログラムで event と呼んでいたものですが、Objective-C でもこういった、メソッドがちゃんと用意されていました。

- (void)willMoveFromView:(SKView *)view

便利なものですね。

force touch

MacBook 12 inch ですごいと思うのが force touch。トラックパッドを押すと、感覚的にはどう考えても押している反応があるのに、装置が作り出した擬似感覚。電源 off で、トラックパッドを押しても全然押した気がしません。これはすごい。

これ、何がいいことあるって、使っている側からすると、スイッチだとどうしても「いつか壊れちゃうんじゃないの」っていうのが気になるのだけど、それがない。同じく内臓ファンもないので、故障しにくさがさらに増します。実は、これ買う前に MacBook Air 11in 使っていたのだけれど、買い替えの理由がファンの故障によるものだったので、なおのこと精神衛生上好ましいのだろうと。

ところで、force touch ができるんだったら、キーボードもそうしちゃえばいいのでは?と思ってネットで調べたら誰もが思いつくことのようで、そんな観測記事がいろいろ載ってました。あまり深く読んでいないのだけれど、自分でも想像を膨らませてみることにしました。

まず、従来のキーボードを全部 force touch に置き換えるのならば、今のキーボード面はのっぺらでよいことになります。金属板一枚貼り付けてある感じでしょうか。それは無駄なことであることは誰もが賛同するところで、液晶ディスプレイ二枚おきという形が想像されます。

ただ、液晶ディスプレイが二枚あっても、一枚はキーボードに使うので手で塞がれてしまい、あまり視認性がよくありません。ってことは、先日発表のあった、ファンクションキーの部分が液晶になっているだけでもよいように思います。そうした場合、依然キーボード部分がのっぺらになってしまいますが、例えば全面トラックパッドとかだとどうでしょう。以前に比べて広くなったトラックパッドの面積。これを拡張して全面トラックパッド+force touch 仕様のキーボードになると。んーー、便利そうですがやっぱり明確なメリットが感じられないなと。

全面スピーカーとかはどうでしょう。これも悪くはないのですがそこまでサウンドにこだわるかなと。しかもノートで。

元に戻って、液晶ディスプレイだと、必要に応じて画面を拡張できることになるので、ま、便利といえば便利かなと。今の所、この線で勝手に予想しておこう。

 

Mac Book 12 inch

MacBook 12 inch を使っています。

これで Xcode を使って開発までしているので、酷使している感がすごいなと。。

インターフェースが usb-c だけとか、キーボードが打ちにくいなど前評判が悪い意味ですごかったのですが、実際使ってみるとほとんど不満がありません。

全くない訳ではなくて少ないながらも不満な点を挙げると、インターフェースが usb-c のみなので、拡張するためのデバイスを購入しましたが、usb-c インターフェースのものはなんでも高い。延長コードで ¥2000 とか、USB の延長コードは 100 円なんですけど・・・と、その価格を知っているととても買えない訳で・・・

早期に改善されることを希望します。

 

CAShapeLayer で描写した図形を消すには?

CAShapeLayer で描写した図形を消そうと、

    CAShapeLayer* circleLayer;

    /*

  描写する部分、省略

     */

    [circleLayer removeFromSuperlayer];

とすると、消えない。

 

なんで?と思って調べたら、

    [circleLayer removeFromSuperlayer];

    circleLayer = nil;

とすると消えることが判明。めんどくさいね。

 Apple のリファレンス見たら、

You can use this method to remove a layer (and all of its sublayers) from a layer hierarchy. This method updates both the superlayer’s list of sublayers and sets this layer’s superlayerproperty to nil.

はいはい、ちゃんと書いてあるね。

 

SKShapeNode で線の先端を丸くするには・・・

SKShapeNode で線を引くと、デフォルトで先端は角ばっています。

今作っているゲームでは、これがちょっと具合が悪いというか、先端を丸くしたいと思い調べて見たところ、こんなプロパティが・・・

some_SKShapeNode.lineCap

指定できる値は 3 種。

kCALineCapButt...これが default

kCALineCapRound

kCALineCapSquare

 

kCALineCapRound を指定すると先端が丸くなりました。

指定できる変数名含めて、わかりにくいですね。

iOS 10、株価(アプリ)でちょっとした変化。

iOS 10 になってから(だと思う)、株価(アプリ)にちょっとした変化があった。

個別銘柄の株価と対比する目的でインデックスを表示したく、日経 225 を表示していました。検索で「225」とすると見つかりますので、それを表示するようにします。

株価では、個別の銘柄のニュース、売買高、時系列グラフを表示できます。日経 225 のようなインデックスでは、なぜかニュースが表示されません。場中の状況を知りたければ必要に応じて日経新聞の HP なんかを見ると確認できますが、株価アプリで一覧で表示できた方がアプリを切り替える必要がなくて断然便利です。

これまでは、なぜかインデックスものはニュースが表示されなかったですが iOS 10 になってからは表示されるようになりました。アップデートされたのですかね?

なんにせよ便利になって良かったです。

UIView の座標系と SpriteKit の座標系を変換する

SpriteKit の scene の座標系は、原点 (0, 0) が左下です。UIView の座標系は Mac でおなじみの右上になります。なぜこのような違いが出るのかというと、これは想像ですが、SpriteKit は重力の概念があり、0 は ground の方が都合がよく、計算のコストを低くできるってことなんだろうと思います。

SKScene に CALayer を追加しようとすると、SKNode は左下が原点、CALayer の path は左上が原点ということになり、オブジェクトを表示しようとするときに少し困ります。要は、Y 座標が変換できればそれでよいので、view の高さを測って座標返還するのかな、あーメンドクセーと思っていたら、こんなメソッドを発見。

 - (CGPoint) convertPointFromView:(CGPoint) point

使い方が少しわかんなかったんですが、こんな感じで OK.

some_object.position = [self convertPointFromView: some_object.position];

便利なメソッドがあるものです。