Translate

ラベル Swift の投稿を表示しています。 すべての投稿を表示
ラベル Swift の投稿を表示しています。 すべての投稿を表示

2017年3月10日金曜日

Swift 3 AppleWatchの活動量計?みたいなリング状をCABasicAnimationで。

AppleWatch持っていないのでわからないけど、CMなどでよく見るリング状のメーターの活動量計ですかね?
あれを真似したかったので、CABasicAnimationで
作ってみようと思ったわけでした。
2日くらい、調べて試行錯誤して、それっぽいものはできました。スムースに回したいだけなので、タイマーでもよかったのですが、自前でループしない方がかっこいいのかなーという事で苦しみました。



とりあえず、こんなところです
今は画面をタップするとランダムな数値にメータが動くという感じです。
それにしても、CABasicAnimation のkeyPathに使える、プロパティーって何があるのかよくわからないし・・

>最重要な肝<
let drawAnimation = 
      CABasicAnimation(keyPath: "strokeEnd")

これさえ見つかれば、できると思います。



参考にさせていただいたサイト

How to add Image to video using GPUImage in Swift

IOS开发基础篇--CAShapeLayer的strokeStart和strokeEnd属性 






2017年3月6日月曜日

Swift Switchを使ったアプリを作る練習

一通りSwift3を勉強したので、何か作る練習です

Switchを並べてチカチカさせるだけのアプリ。
Switchが自動で動いても何もよろしくないですが・・
昔のコンピュータインジケータ的なインテリアとして。



UISwitchコントロールをExSwitchとして拡張し、ランダムタイマー仕掛けて、色を変える処理を入れてこれをループで回して配置しただけ


何かゲームにしようかと思ったけど思いつかなかったので、こんなところで。




2017年3月2日木曜日

Swift オブジェクトのドラッグって、PanGestureRecognizerのおかげで2行や5行で書けちゃうんだ!


オブジェクトのグラッグってガチでやると面倒で、
タップで座標とって移動で差分を当てて表示して離したら諸々後処理とか・・もう、いらないんですね!そう、PanGestureRecognizerさえあれば!!
 いやいや便利な世の中になったもんですねー

 (UFOをつまんで移動できます-5行タイプ)

 Pan Gesture Recognizer の設定
 1.こいつです

2.オブジェクトにドロップ



3.張り付いたらこれを、Action接続



4.Actionに触った座標位置をUFO座標に入れる処理を書く

 2行書いただけでも動きます!ちょっとずれるけど。
 小さいオブジェクトならこれでいいでしょう

5.もうちょっと丁寧に仕事して5行くらいで書く。
 はい!ずれないで動きます!

終わり





2017年2月23日木曜日

Swift 3 勉強中、オブショナル? 初期化すればよくね! 感嘆符と疑問符だらけ ?? nil  

Disり駆動勉強中です!
 
オプショナルって、未初期化でエラーを出したくないという事のために随分とめんどくさい仕様を盛り込んでコード見づらくしたもんだという所感。

オプショナルって以下だよね

・普通の型にはnil入れられないという仕様にした。
          var hoge:String = "ホゲホゲ"
          hoge = nil    < エラー

・nil入れるために、普通の型改(オプショナル型)を作った。
 疑問符(?)つけて定義します。 
    var hoge:String? = "ホゲホゲ"
          hoge = nil    <OK
  しかし、こんなことしたい場合そんなに多くないきがするがなー
 
・普通じゃないのでnil以外が入っている時に、普通に処理できない。
    var hoge:String? = "ホゲホゲ"
          hoge += "ピヨピヨ"    <エラー    余計なことするから・・

・nil以外を処理するために、一時的に普通の型に変換する仕組みを作った。オプショナル型に感嘆符(!)をつけて処理します。
    var hoge:String? = "ホゲホゲ"
          hoge! += "ピヨピヨ"    <OK 何びっくりしてるんだか・・

 ・nilだった場合の初期値ってのも用意されている、疑問符疑問符(??)。
  var kosu:Int?
      var kakaku:Int
      kakaku = 120 * (kosu ?? 1)
  ちゃんと初期化して計算式通せよ!・・

 なお、オプショナルバインディングは、コード的に楽になる面も多いので、disりません^^
でもあとで判断するか、先に初期化しておくかという違いなだけだとも言える・・

 
   


 

2017年2月20日月曜日

Swift 3 勉強中、文字列の最後の文字読み出し、str.index(before:xxx)とか?、面倒だねー

えっ?まじですか?
swiftで文字列の最終文字取り出しってこんな面倒なの?
そしてしつこいようだけど、これモダンな言語なの?


他になにか手はないのか?
せめてこんな感じで出来ないのかなー


これもめんどくさいし

本当はこんな感じが出来てほしい
str[str.length-1]



2017年2月19日日曜日

Swift 3 勉強中、numbers.map{$0 * 2} とか、クロージャ?・・モダンな言語なの?記号ちっくな言語では?

夕食後もdisり手法でSwift勉強中です
クロージャ(ブロック)のあたりです

let numbers = [1,2,3,5,8,13,21]
let array1 = numbers.map{$0 * 2}

とかできちゃうけど、$0って、第一引数だとか..
何それ?何それ?
 
C言語ちっくをやめてモダンになるはずでは?
それなのに、変な省略形もあったもんですなー

私は下のような省略しない方がわかりやすいと思うだ

let array1 = numbers.map){(val:Int) -> Int in
     return val * 2
})

おぼえりゃ読めるようになるだろうけど。
覚えるためにdisりブログってるわけですだ
 


 

Swift 3 勉強中、defer文もなかなか癖がありますなー

defer文
ブロックを抜ける時に動く処理を書いておくもののようです
 
しかし、書くとどの順番で動くのか直感的ではない・・
deferは下から動く仕様らしいので
書きようによっては下から上に処理かけちゃうよ・・
 ノイマン先生げきおこ?


あと、deferはreturn文より上に書いておかない機能しないようですな。下の例では、3の時挨拶しないで終わっちゃってますよ・・アララ
 




Swift 3 勉強中 関数でいち抜けたするのに、gurad-else文で書かねばなんねの?

今日は関数など勉強中
関数途中抜けするのに guard - else文ってのがあるようだけど、これはifの反対条件でRubyで言ったらunless文なんですかね?どう言う意味で使うんだろう?
「守れないので抜けたー」みたいな戦前逃亡??





別にif文で良くないですかね〜
エラーもワーニングも出ないようですし。

決めなら決めにするし、半端なら無駄に拡張するのやめろー
なんかSwiftってまだブレてるでしょ。
(個人的意見です)




2017年2月18日土曜日

Swift 3 勉強中、Swiftのswitch文って強力だねー、なんでも出来過ぎじゃないか!?

Swiftのswitch文って結構複雑なことできちゃうんですね!

タプルを使って複数の値を同時判断しつつ、
レンジ演算子で範囲特定できちゃったり・・


 バリューバインディングとwhereでcaseの中で条件式をかけちゃうなんて・・



 あっ、これだけだとswitch文でやる意味ないか・・

 今までswitch文って、1変数の固定値判定にしか使えないのが普通だと思っていたもので・・唖然  しかし、なんでもできて素晴らしいけど、他の言語への移植性悪くないですかねー

Swift 3 勉強中、if文で複数の条件式をカンマ区切りで使えるって、C言語みたいだね

Swift 3のif文でも、複数の条件式をカンマ区切りで使えるんですねー、なぜかここはC言語引き継いだまま?
条件多い時 && 使うとごちゃごちゃするから
これはいいね!

if a > 10, b < 90, c > 50 {
   print("条件クリアー")
}

これできるのC言語直系だよね、C#とかJavascript,JavaもRubyもできないよね(たしか)。

まあ、使っていきましょう。
 
  

Swift 3 勉強中、インクリメント、デクリメントが無くなっただと!しかし、アセンブラ見たら・・

インクリメント、デクリメントが無くなっただと!
書き間違いがどうとか、cぽいforが無くなったから良いとか、そんなことじゃない!
インクメントやデクリメントは、プロセッサ命令だろー、使わないと遅くなるべ!
って思って調べた。

とりあえずこんなコードを書く

でアセンブラに落ちたコードを見る!

a += 2 の時
a += 1の時
a -= 1の時

なんだ、ちゃんとやってるじゃないか!
8086どノーマル時代からアセンブラ見てないので、たぶんでしかわからないけど、ちゃんと+1、-1の時はインクリメント命令、デクリメント命令使っているようで、Swift3素晴らしかった。

どうしても速く動くコードにしなきゃ脳が心配しちゃうんだよって話でした。
こんなのに詰まっていると勉強進まない・・


Swift 3 勉強中、計算式でどこか一箇所少数値なら全部少数は横暴だと思う


SwiftってObjectiv-cと互換性もあっていいなと、Ver1が出て思っていたけどVer2で結構変更、Ver3に至っては下位互換無しで暴走進化してしまったようで。
最近ちょっと試しアプリ作るにも何かいてもエラー出て、何時間も試行錯誤しなければ書けなくなったわけでした・・

さらに、書店からもObjective-cの書籍が消え去っていたということもあって、改めてSwift3を勉強しますか!という段階です。

で基本から始めて早速気に入らないことが・・

a = 3 * (10/4)これは10/4 は 2になるので6と、これOK



これを7.5にしたい場合どこかを少数値にするんだとか!



え?じゃあこれでもいいわけかい!!
へーんなのっ


そもそも、3.0に対して(10/4)=2をかけたい時もあるでしょ!こう書かねばならんのかい!?


はあはあ・・これ気に食わないのは頭固いのかな?
まあ、仕様は仕様だから仕方ないけど。
一箇所少数値なら全部少数値扱いってやりすぎでね?と思ったわけでした。

では。

参考書(これ見て勉強してます)