Rodhos Soft

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

UIKIT

座標系の変更

以下のようにtargetViewがtargetViewに貼り付けられているビューから(scrViewへ)の変換ができる。 let point = self.scrView.convert(targetView.frame.origin, from: targetView.superview)

画面消えるタイミング

>|swift| if (self.isBeingDismissed || self.isMovingToParentViewController) { ... } |

カスタムメニュー

つかったことがないが。。 override func viewDidLoad() { super.viewDidLoad() UIMenuController.shared.arrowDirection = .right; UIMenuController.shared.menuItems = [UIMenuItem.init(title: "a", action: #selector(hello))] let r = CGRect(x: 0, y:…

カスタムビューのXCode表示

@IBDesignable class MyView: UIView { @IBInspectable var cornerRadius : CGFloat = 0.0; // Only override draw() if you perform custom drawing. // An empty implementation adversely affects performance during animation. override func draw(_ re…

UIWindow

自作アラートのような使い方ができる。 UIWindow.rootViewControllerを設定 UIWindow.windowLevelはノーマルかアラートの+幾つかを設定するとより前に出てくる。 UIWindow.makeAndVisibleで表示される。 参照を破棄してmakeAndVisibleで消える。

RootViewController

WindowのRootViewControllerをすげ替えるとUIViewControllerを変えられるがWindowにくっつけていたViewも消える。。orz。以下実験コード import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // Do a…

勉強中の幾つか

以下 ざっと確認中 カスタム遷移 iOS View Controllerプログラミングガイド: トランジションアニメーションをカスタマイズする 復元 iOS View Controllerプログラミングガイド: 状態を保存して復元する コンテナ iOS View Controllerプログラミングガイド: C…

カスタム遷移の流れ

animationControllerForPresentedController:presentingController:sourceController: UIKitが表示されたVCがtransitioningDelegateを持っていると聞いてくる。 そこで適切なアニメータを作って返す。 interactionControllerForPresentation 次にUIKitは操作…

UIViewControllerTransitioning

UIViewControllerContextTransitioning以外 UIViewControllerAnimatedTransitioning @protocol UIViewControllerAnimatedTransitioning <NSObject> - (NSTimeInterval)transitionDuration:(nullable id <UIViewControllerContextTransitioning>)transitionContext; - (void)animateTransition:(id </uiviewcontrollercontexttransitioning></nsobject>

UIViewControllerContextTransitioning

UIViewControllerTransitioning.hのヘッダーに書いてあったUIViewControllerContextTransitioningのコメントの意訳をしてみます。 @protocol UIViewControllerContextTransitioning <NSObject> @property(nonatomic, readonly) UIView *containerView; @property(nonat</nsobject>…

色々

applicationProtectedDataDidBecomeAvailable でデータ保存ができるようになるタイミングが取れるiOS 7対応アプリを作るなら知っておきたい「UXを向上させるBackground Fetchの使い方」 #ios7yahoo|CodeIQ MAGAZINE wazanova.jp

UIApplication

UIApplicationはUIResponderのサブクラス。delegateはassign。以下は調査中 isIgnoringInteractionEventsはイベント無視keyWindowwindows idleTimerDisabled UIControlがあれするところisNetworkActivityIndicatorVisiblestatusBarStylestatusBarHiddenstatu…

UITableViewCellの透明

Storyboardで効かないことがiOS9で発生した。 コード上でセルのbackgroundColorにclearcolorを入れてやることで解決する。

Exitの使い方

戻りたい画面に @IBAction func returnScreen(segue:UIStoryboardSegue) { print("returnScreen"); } } みたいなのを書いておく、そうするとexitに出てくるのでボタンなどと接続すれば良い。

UIDeviceの回転

UIDeviceの回転は同じ回転方向だと設定しても何も起こらない。 また、UIDeviceOrientationとUIInterfaceOrientationは左右が逆。

Separator

UITableViewはSeparatorカラーが取得できる。

LayoutMargin

親のを引き継ぐかをまず決める必要がある。引き継がない場合はそう設定しないと反映されない。 self.preservesSuperviewLayoutMargins = false; self.layoutMargins = UIEdgeInsetsMake(0, 10, 0, 10);

画像をUIImageに

UIGraphicsBeginImageContextWithOptions(self.frame.size, NO, [[UIScreen mainScreen] scale]); CGContextRef context = UIGraphicsGetCurrentContext(); CGContextTranslateCTM(context, 0, 0); CGContextScaleCTM(context, 1.0, 1.0); [self.layer rende…

連打防止

秒数をカウントしてやる。 class DoubleTap { var actionTime:Date? = nil let actionInterval:TimeInterval = 0.3 func check() -> Bool { if let actionTime = actionTime { if -actionTime.timeIntervalSinceNow < actionInterval { return false } } sel…

円を描く

extension CGRect { init(_ center:CGPoint, _ size:CGSize) { self.origin = CGPoint(x:center.x - size.width/2, y:center.y - size.height/2) self.size = size } } extension CGPoint { init(_ x:CGFloat, _ y:CGFloat) { self.x = x self.y = y } } ext…

制約を更新する。

UIViewのupdateConstraintsを上書きする。superを最後に呼ぶことを忘れない。制約の反映はsetNeedsUpdateConstraintsを呼ぶ。

デバイスごとのUI調整

途中にUIViewを挟んでそのUIViewのアスペクト比を決め、左右などを固定することで、そのUIViewに隣接する形でビューを拘束配置していけば画面の大きさが変わった際の調節ができる。

toolbarの色をかえる

let button = UIBarButtonItem(customView:button) self.toolbarItems = [flexl, button, flexr] self.navigationController?.toolbar.barTintColor = UIColor.White self.navigationController?.setToolbarHidden(false, animated: true)

無限ループ

UICollectionViewを継承したクラスをつくり、layoutsubViewsで中心からコンテンツが1/4程度外れていたらContentOffSetを中央へ移動させるようにすれば良い。 let totalContentWidth = CGFloat(cellCount) * cellWidth let centerOffsetX = totalContentWidth…

ダイナミックタイプ

自動的に文字の大きさを設定してくれる。フォントを対応するタイプを指定すれば良い。 UIFont.preferredFont(forTextStyle: .body) ストーリボードでもできる。コンテンツサイズの変更は次の通知を受ければ解る。 Notification.Name.UIContentSizeCategoryDi…

UITextViewの縦方向の中央寄せ

contentSizeをオブザーブして textView.addObserver(self, forKeyPath: "contentSize", options: .new, context: nil) contentSizeに変化があれば、中身を調節する。 override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NS…

コレクションビューの隙間

水平な線形レイアウトで隙間を調整したい時、しかもminimumをなくしたいと考えた時、ラインも修正すると良い。

セクション

セクションは流れていく。それを止めるには stackoverflow.com

画面の一部を切り取る

resizableSnapshotView これとUIView.transitionを組み合わせて一部分の画面遷移を再現できる。

viewWillLayoutSubviews

viewWillLayoutSubviewsはviewのlayoutSubviewsの前に呼ばれる。 ちなみにlayoutSubviewsはレイアウト更新タイミング、制約つけたいときはupdateConstraints。viewWillLayoutSubviewsは結果的にViewWillAppearとViewWillDidAppearの中間で呼ばれることになる…