All Stories

SwiftのProtocolに対してKVOを行う

前回から引き続きKVOについての投稿です. SwiftにおけるKVOは対象のpropertyの制限 (@objc dynamic) は広く知られていますが, Protocolに対してKVOを行うのもハードルが高かったりします. delegateを自分で実装した方が早い気もしますが, Property Binding的なことをしようとすると, KVOの方が直感的なコードを書けるので悩ましいところです. この記事では, Swift Protocolに対してKVOをする方法を紹介します.

KVOのクラッシュ地獄から脱却する

iOSにはKey-Value Observing (KVO)というpropertyの変更を監視する仕組みがあります. NSObjectが提供する機能である為, Swiftで使うにはいくつもの制限があり必ずしも使いやすいとは言えませんが, サードパーティライブラリを使うことなく利用できるのは大変便利です. そして, AVPlayerなどを扱う際には避けて通れない機能でもあります. しかし, KVOを利用すると解放済みオブジェクトに対して通知が行ってクラッシュすることがあり, 長らく悩まされてきました. 長年の悩みの原因の1つが解消されたので, それを紹介します.

AVAudioEngineでエコキャン実装 (with ManualRendering) その2

前回の続き。 前回の実装では周期的に音が断続的になる不具合がありました。 ManualRecordingでない場合は、この現象が発生していなかったので、どこかでバッファが枯渇しているのでは? と当たりをつけて修正していきます。

AVAudioEngineでエコキャン実装 (with ManualRendering)

iOS13からAVAudioEngineでVoiceProcessingIOを用いたエコーキャンセルがsetVoiceProcessingEnabled(_:)によって簡単にできるようになりました。 とはいえ、iOS13以前のバージョンでもエコーキャンセルをできるようにしたいので、以前のバージョンでも対応する形で実装してみました。

UIKitのisHiddenを二値だと信じてはいけない

先週、なぜかコード的にはおかしくないはずなのに、Viewの表示状態が壊れるという現象に遭遇しました。 どうも調べてみると、isHiddenで代入しても値が反映されないようでした。

iOS13の外観モード(ダークモード)に対応する方法

これは、iOS13から追加される外観モードの対応方法を纏めたものです。現時点ではまだbeta8なので、情報が正しくなくなる可能性があります。 また、まだ対応はしていないので、間違っていたら随時更新するかもしれません。