Localizable.strings を更新します。
SwiftGen を使ってコード生成しているので、キーは CamelCase で適当な粒度で . で区切ってグルーピングします。
画面名.要素 または 画面名.要素.状態 となるようにしてください。
| https://github.com/0xfe/vexwarp | |
| ステレオ: 対応 | |
| アルゴリズム: Phase Vocoder | |
| 音質: あまりよくない | |
| AudioBufferを出力するので使いやすそう。めちゃくちゃ古い | |
| https://github.com/olvb/phaze | |
| ステレオ: 対応 | |
| アルゴリズム: Phase Vocoder | |
| 音質: あまりよくない |
| import SwiftUI | |
| import UIKit | |
| /// UIKit でジェスチャを取得するための透明な View | |
| /// | |
| /// overlay で利用する | |
| /// 参考 https://stackoverflow.com/a/57943387/1567777 | |
| struct ClearLongPressGestureView: UIViewRepresentable { | |
| let onChanged: (Bool) -> Void |
| import SwiftUI | |
| extension View { | |
| /// By reducing the hit detection, make it so that tap detection occurs within the range of the frame | |
| /// | |
| /// In SwiftUI, a View within about 10pt radius from the tap position is detected as touch, | |
| /// so we place a contentShape that is just as small. | |
| func exactHitArea() -> some View { | |
| modifier(ExactHitAreaModifier()) | |
| } |
| import SwiftUI | |
| extension View { | |
| /** | |
| * This is a custom extension to SwiftUI's onTapGesture, designed to avoid the issue where the tappable area extends slightly beyond the view's drawing bounds. | |
| * Unlike the original onTapGesture, this version ensures the tap is only recognized within the exact drawing bounds of the View. | |
| */ | |
| func onTapGestureExact(_ action: @escaping (CGPoint) -> Void) -> some View { | |
| overlay { | |
| GeometryReader { proxy in |
| import SwiftUI | |
| struct ContentView: View { | |
| @State private var count = 0 | |
| @State private var states: [InfoView.State] = [.init(text: "", text2: "", text3: "")] | |
| var body: some View { | |
| VStack { | |
| RedrawBorder { | |
| Button { |
| パスコードロックしてない iPad がアクセスガイドのパスコードがわからなくなり解除できなくなった | |
| 再現するかわからないが、下記の手順でなぜかアクセスガイドが解除できた | |
| - ホームボタン+電源ボタン同時押しで強制再起動 | |
| - ロック画面出てる状態でホームボタン+電源ボタン同時押しで強制再起動 | |
| - ロック画面をスワイプでカメラを起動 | |
| - 左下のサムネイルからカメラロールを開く | |
| - すべての写真を選択 |
Don't
function onTapButton(type) {
switch (type) {
case "foo":
fuga()
break
case "bar":
hoge()| const fs = require("fs") | |
| const child_process = require("child_process") | |
| const readdirRecursively = (dir, files = []) => { | |
| const paths = fs.readdirSync(dir) | |
| const dirs = [] | |
| for (const path of paths) { | |
| const stats = fs.statSync(`${dir}/${path}`) | |
| if (stats.isDirectory()) { | |
| dirs.push(`${dir}/${path}`) |