マガジンのカバー画像

Swiftの勉強

25
Swiftを使用したiOSアプリ開発の過程で勉強したこと、わかったこと等のまとめ
運営しているクリエイター

記事一覧

[SwiftUI] Viewをスライドさせて入れ替える

[SwiftUI] Viewをスライドさせて入れ替える

ググっても意外とやりたいアニメーションが見つからなかったので、試行錯誤まとめ。

やりたいことボタンなりスワイプなりでViewを切り替える時に、アニメーションでスライドさせて入れ替えたい。
入れ替え方向は左右両方向をフォローしたい。

実装基本方針はasymmetricでトランジションさせて、insertionとremovalを対称にアニメーションさせます。

実装A

move(edge:)を使

もっとみる
雑にイカちゃんになるアプリを作りました

雑にイカちゃんになるアプリを作りました

Splatoon3の発売日も近くなってきましたね。
だからというわけでもないですが、写真を撮影してインクリング風に加工するカメラアプリを作りました。

概要それっぽく髪と眉の色を変えて目に画像を重ねます。

作った画像はシェア・保存できます。

詳しい説明撮影画面

アプリを起動すると撮影画面が表示されます。
写真の撮影にはカメラのアクセスが必要なので、アクセスを要求するダイアログが表示されたら許

もっとみる
[SwiftUI] Menu+キーボード+αでレイアウトが崩れる問題の対応

[SwiftUI] Menu+キーボード+αでレイアウトが崩れる問題の対応

SwiftUIあるあるのレイアウト崩れです。
ググっても意外と出ないのでメモしておきます。

問題ポップアップメニューを展開するMenuと、キーボード入力を行うTextFieldやTextEditorと、高さが変化するViewを組み合わせた時に、Menuのラベルにおかしな余白が追加されてレイアウトが崩れる。

サンプルコード

TextFieldにフォーカスすると高さが変わるText、TextFi

もっとみる
[SwiftUI] ボタン制御

[SwiftUI] ボタン制御

基本は.disabled()に渡したBool値の切り替えですが、処理中にreturnが混ざったりアニメーションを待ったりすると色々面倒だな、と。

とりあえずプロトコル拡張で書いてみました。

実装disableButton()とenableButton()の定義はプロトコルを採用した側で記述します。

defaultDurationはプロトコル拡張で定数が使えないので計算型プロパティのgetで代

もっとみる
[SwiftUI]とにかくプロンプトでアクセスを要求する

[SwiftUI]とにかくプロンプトでアクセスを要求する

起動時に加えてバックグラウンドからの復帰時等もプロンプトを出す方法。カメラアプリのカメラアクセスとか。

実装SwiftUI App(AppDelegate.swiftとかSceneDelegate.swiftを使わないやつ)です。

import SwiftUIimport AVFoundationstruct ContentView: View { @Environment(\.scen

もっとみる
[SwiftUI] iOSアプリに(画像添付)Tweetボタンを実装する

[SwiftUI] iOSアプリに(画像添付)Tweetボタンを実装する

共有シートを使うのが本筋かなと思いますが、クライアントAppを入れてない人にも画像をシェアしてほしい!みたいな時のために。

前提iOSアプリからTwitterボタンで画像添付ツイートをしたい

iOS15

2022年4月現在の情報です

動作イメージTweetボタンをタップすると画像左のシートが下から出てきて、“ツイートする”を選択すると画像添付ツイートされます。

テキストエディタのプレース

もっとみる
[Swift]共有シートのプレビューを綺麗にまとめる

[Swift]共有シートのプレビューを綺麗にまとめる

ググったりGithub覗いても私にわかるレベルでまとまったサンプルがなかったので、調べた結果のまとめを残しておきます。

やりたいことUIActivityViewControllerのactivityItemsに画像と文字列を渡して、共有シートのプレビューに画像と文字列だけを表示したい。

実装例share()の前半はテスト画像の生成処理です。
if #availableの箇所はiOS15で "'w

もっとみる
[SwiftUI]Image Setの使い方

[SwiftUI]Image Setの使い方

意外とパッと出てこないので試した結果をメモ。
CIImageの作成がもう少し簡単な方法がないものか。 ■

UIImage

UIImage(named:)

let image = UIImage(named: "ImageSetName")

UIImage(imageLiteralResourceName:)

let image = UIImage(imageLiteralResource

もっとみる
[SwiftUI] Figmaを使ってカスタムシンボルを作成する方法

[SwiftUI] Figmaを使ってカスタムシンボルを作成する方法

カスタムシンボルの編集ってFigmaとか使えばいいのかなー?という雑な認識で表示まで試してみました。(Figmaさわった経験なし)
といっても思ったよりFigma外でする作業が多かったので、SVG編集以外はただのカスタムシンボル作成まとめです。

カスタムシンボルの作成準備テンプレートのエクスポート

まずはSF Symbolsアプリでベースにするシンボルを選択して、“ファイル > テンプレートを

もっとみる
[Swift]CIFilterで縁まで綺麗にぼかしをかける方法

[Swift]CIFilterで縁まで綺麗にぼかしをかける方法

CIGaussianBlurとか使った時に縁が透明になってしまう問題の解決です。

実装こんな感じのフィルターを作ります。
CIGaussianBlur以外のBlurでも要領は同じです。
radiusのデフォルト値10はCIGaussianBlurのデフォルト値からです。

解説ここの記事を参考にしました。

まず基本として、Blur系のフィルターをかけると画像サイズが大きくなるので、最後は入力画

もっとみる
[Swift(iOSアプリ開発)]髮の色をそれっぽく変える処理

[Swift(iOSアプリ開発)]髮の色をそれっぽく変える処理

黒髪でも金髪でもプログラマブルに一律で処理する方法です。
SemanticSegmentationを使用した処理になりますが、取得するまでの処理は以前のnoteにまとめてあります。

SemanticSegmentationの使用法として真っ先に思いつくのが髪の色を変えることではないでしょうか。
参考としてPhotoshop等のフォトレタッチソフトではどうやって色を変えているのかググってみると「色

もっとみる
[Swift]CIImageの色を想定通りに操作できない時の解決

[Swift]CIImageの色を想定通りに操作できない時の解決

色の演算が想定通りにいかないとか、(0.5, 0.5, 0.5)がニュートラルグレーにならないとか、そういう時の話です。

問題例えばSemanticSegmentationで取得した髮と肌のmatteを↓のような感じでCIAdditionCompositingフィルタに突っ込んで合成するとします。

直感的には髮と肌の領域が合成されて生え際が綺麗に白になった画像が出力される気がします。
しかし実

もっとみる
[SwiftUI]カメラの撮影結果を待ち受ける

[SwiftUI]カメラの撮影結果を待ち受ける

よくある簡単なサンプルから少ししっかりした作りにしたい時の話です。
キューによる非同期とかセマフォを使います。

撮影処理のおさらいまず、基本的なカメラ撮影の流れについて単純化します。
例として撮影用のクラス名をcamera、メソッド名をtakePhoto()としています。

ContentView
--> Button( acition{ takePhoto() } )

Camera: AVC

もっとみる
[Swift]iOS14でenabledSemanticSegmentationMatteTypesを設定すると挙動がおかしくなる問題の解決法

[Swift]iOS14でenabledSemanticSegmentationMatteTypesを設定すると挙動がおかしくなる問題の解決法

そろそろiOS14にメジャーアプデしてみたら、作成中のカメラアプリでカメラプレビューもAVCapturePhoto取れなくなってハマりました。

photoOutput.enabledSemanticSegmentationMatteTypes = photoOutput.availableSemanticSegmentationMatteTypes

どうもこの一文でenabledSemanti

もっとみる