Rodhos Soft

備忘録を兼ねた技術的なメモです。Rofhos SoftではiOSアプリ開発を中心としてAndroid, Webサービス等の開発を承っております。まずはご相談下さい。

Combine

細かいことは無視してひとまず動かしてみる例を勉強してみた。 JSONを読み込む用のモデル struct Article: Codable { let title:String let url:String } 読み込む func fetchArticles() -> AnyPublisher<[Article], Error> { let url = URL(string: "https:…

UIKitとの連携

チュートリアルより。 UIPageViewControllerをSwiftUIで使う。 まず、使いたいUIViewControllerをwrapするクラスを作る。 そのクラスはUIViewControllerRepresentableを実装する。 import Foundation import SwiftUI import UIKit struct PageViewController…

編集画面をつくる

チュートリアルより まずプロフィールのデータ構造は struct Profile { var username: String var prefersNotifications: Bool var seasonalPhoto: Season var goalDate: Date // デフォルト設定 static let `default` = Self(username: "g_kumar", prefersN…

画面遷移をつける

チュートリアルより ホーム画面から遷移するコードを書く。 struct CategoryHome: View { // リストをcategory名をキーに辞書化している。 var categories: [String :[Landmark]] { Dictionary ( grouping: landmarkData, by: { $0.category.rawValue } ) } …

アニメーションをつける

チュートリアルより アニメーションは.animationで簡単につけられる。 .animation(nil)でアニメーションを切ることができる。 withAnimationを使うと、ブロック内にアニメーションがつけられる。 遷移時の遷移方法ははtransisionで指定できる。 transisionは…

アイコンを作る

チュートリアルより。 背景に6角形を描き、その上に山のシンボルを角度をかえてぐるっと8個放射状に配置する。ZStackを使って重ねている。 放射状に配置するのはForEachで、サイズをハードコーディングを避けるにはGeometryReaderを用いている。 ポイント…

パスで描く

チュートリアルより Pathで使う描画データ struct HexagonParameters { struct Segment { let useWidth: (CGFloat, CGFloat, CGFloat) let xFactors: (CGFloat, CGFloat, CGFloat) let useHeight: (CGFloat, CGFloat, CGFloat) let yFactors: (CGFloat, CGFl…

ボタンのタップや表示のフィルター

チュートリアルより。 まず、セルにスターの表示非表示をつける。 struct LandmarkRow: View { var landmark: Landmark var body: some View { HStack { landmark.image .resizable() .frame(width: 50, height: 50) Text(landmark.name) Spacer() if landma…

リスト表示

チュートリアルより まず静的なJSONのデータ [ { "name": "Turtle Rock", "category": "Featured", "city": "Twentynine Palms", "state": "California", "id": 1001, "park": "Joshua Tree National Park", "coordinates": { "longitude": -116.166868, "la…

Viewの配置例

import SwiftUI struct ContentView: View { @State var tapped = false var tap: some Gesture { TapGesture(count: 1) .onEnded({ _ in self.tapped = !self.tapped; }) } var circle : some View { Circle() .fill(self.tapped ? Color.red : Color.black…

UIKitをUIViewRepresentableで使う

makeUIViewとupdateUIViewを実装すれば良い。プレビューも効く。 import SwiftUI import MapKit struct MapView: UIViewRepresentable { func makeUIView(context:Context) -> MKMapView { MKMapView(frame: .zero) } func updateUIView(_ uiView: MKMapView…

カスタムイメージ

カスタムビューを作ることは簡単にできる。これは丸く切り取ったもの struct CircleImage: View { var body: some View { Image("turtlerock") .clipShape(Circle()) .overlay(Circle().stroke(Color.white)).shadow(radius: 10) } }

Hello, World

まず、もっとも簡単な使い方をしてみた。 @State var tapped = false var tap: some Gesture { TapGesture(count: 1) .onEnded({ _ in self.tapped = !self.tapped; }) } var circle : some View { Circle() .fill(self.tapped ? Color.red : Color.black) .…

文字の置換

import re while True: inp = str(input("input=")) ans = re.sub("[0-9]","9",inp) print(ans)

...argsで関数にタプルを渡す。

例えばf(S,N,B)という関数があるとして、args=["a",3,false]というタプルを渡すには f(...args)とやれば良い。同様のことは配列においても可能。

LFS

git

medium.com qiita.com 大容量ファイルもGitで管理。 Git LFSの使い方 from hibiki443 www.slideshare.net gitで管理されるべきでないバイナリファイルなどをgit上で管理するための機能らしい。 gitはハッシュ値と保存先をリポジトリで管理している。バイナリ…

長押し系

ひとまず色々あるのでまとめて /* 画像のクリックなどのイベントを無視 */ img { pointer-events: none; user-select: none; -moz-user-select: none; -webkit-user-select: none; -ms-user-select: none; -webkit-user-drag: none; }

スクロール禁止にする

この記事に詳細は書いてある。 qiita.com touchmoveをaddEventListenerしてpreventDefaultする。その際にpassive:falseを指定する必要がある。 function handleTouchMove(event:TouchEvent){ console.debug("touchmove.noScroll prevent.."); event.preventD…

スキーム

スキームの設定で、ビルドにdebug, adhoc, releaseの何を使うか、アーカイブにdebug, adhoc, releaseの何を使うかを決められる。 スキームは複数作れるのでその設定も増やせる。

中身が空のフォルダになる

git

Sorcetreeでcloneしたところ、中身が入っていないフォルダができることがあった。 warning: templates not found が出ていた。以下をみると重たいかららしいが、今回は他のブランチをチェックアウトした。 sourcetreeでcloneした時に warning: templates not…

apatcheの使い方

macで初歩的な使い方を忘れていたのでメモしておく。 入っているか httpd -v 開始 sudo apachectl start sudo apachectl restart 動いているか ps aux | grep httpd 設定、ドキュメントルートなどは httpd.conf ファイルにある。

BASIC認証

久しぶりにやってはまった。 .htaccess をドキュメントルート以下で制限したいところにおくのだが、 そもそも、それが効くのはhttpd.confでAllowOverride Noneではだめで、Allとかにしておく必要があった。 あと、Basic認証は通ってしまえばあとは出てこない…

はまったこと

PWA

iOS13ではcrossorgin設定だけではだめで、BASIC認証もかかっているときはmanifest.jsonファイルを.htaccessで許可しておかないとだめなようだ。 <files manifest.json> Satisfy any order allow,deny allow from all </files>

読むべきもの

CORS設定 オリジン間リソース共有 (CORS) - HTTP | MDN

rxjsで購読を止める

色々やり方はあると思うが一つ聞いたのはこういうもの。 const root = new BehaviorSubject<"start"|"end">("start"); const subject = new Subject<string>(); const op = root.pipe(mergeMap((x) => { if (x == "end") { return throwError(new Error("end")); } r</string>…

並べる

Vue

例えば <v-row> <v-col v-for="(list, i) in mylists" :key="i" cols="6"> <hogecard v-bind="list" /> </v-col> </v-row>

keyofのtips

const myMap = <const>{ A:{hoge:"a"}, B:{hoge:"b"} }; type keys = keyof typeof myMap;` keysはA|Bという型になる。 ちなみにmyMapはreadonly属性になってる。</const>

認証関連

manifest.jsonが401で認証通らず読み込めないのはcrossOrigin="use-credentials"をつけないといけないからのようだ。 https://developer.mozilla.org/ja/docs/Web/HTML/Attributes/crossorigin

urlに飛ぶ

window.location.assign(***)だった‥。

長押し無効

このあたり touch-action: none; pointer-events: none;