今日は、ガワネイティブアプリを作成するための準備としてデザイン部分をcssファイルにまとめていました。
ガワネイティブアプリはPC用のサイトと同じページを利用しますが、デザインだけはアプリ専用にします。
デザイン部分をcssファイルにまとめることで、PC用とガワアプリ用のCSSを手軽に切り替えられるようにします。
∧∧
(,,゚ー゚)
~(___ノ
↑ちびしぃです。特に意味はありません。
今日は、ガワネイティブアプリを作成するための準備としてデザイン部分をcssファイルにまとめていました。
ガワネイティブアプリはPC用のサイトと同じページを利用しますが、デザインだけはアプリ専用にします。
デザイン部分をcssファイルにまとめることで、PC用とガワアプリ用のCSSを手軽に切り替えられるようにします。
∧∧
(,,゚ー゚)
~(___ノ
↑ちびしぃです。特に意味はありません。
今日もテキスト漫画のサイトに手を入れていました。
・今日やったことその1
複数の半角スペースをWebで表示しようとすると、1つの半角スペースにまとまってしまうのはWebの仕様ですが、この仕様はテキスト漫画を作成する場合に混乱を招きます。
そこで、テキスト漫画を表示する際は半角スペースを特殊文字にして、1つにまとまらないようにしました。
・今日やったことその2
テキスト漫画のサイトとWordpressのサイトに同じテキスト漫画を表示した場合、微妙に表示が異なっていることに気づきました。調べたところ、lang指定が原因でした。
<html lang=”ja”>
これで表示変わっちゃうんだね・・・この対策も行いました。
・今日やったことその3
フォント指定のタグを、標準でコピーするようにしました。
↓こんなのです。
<p lang=”” style=”font-family:’MS PGothic’,’MS Pゴシック’,sans-serif;font-size: 12pt; line-height:normal;”>
・・・テキスト漫画部分・・・
</p>
これで「コピーする!」のリンクからコピペするだけで手軽に使えます。
もう完璧だと思います。
∧_∧
( ・ω・)=つ≡つ
(っ ≡つ=つ=つ
/ ) バババ
( / ̄∪
ボコボコにしてやんよ。
昨日からAAズレの対策を色々検討していましたが、よくよく考えたら問題ありませんでした。
スマホ使う人:スマホで作ってスマホで使う → ズレない
PC使う人:PCで作ってPCで使う → ズレない
私のような開発者:PCやスマホで作ってスマホやPCやいろんな環境で確認する → 色々ズレる
うん、多分PCやスマホ混在(WinやMac混在)で使う人少ないよね。
既に解決してた。
∧_∧
_( ´Д`)
/ )
∩ / ,イ 、 ノ/
| | / / | ( 〈 ∵.
| | | | ヽ ー=- ̄ ̄=_、
| | | | `iー__=―_ ;,
| |ニ(!、) =_二__ ̄_=;,
∪ / /
/ /
/ _/
ヽ、_ヽ
いや、でも自分以外の不特定多数に見てもらいたいから、いろんな環境で見られるよなぁ。全然解決してないわ。でも使う人がきっとなんとか解決方法を編み出してくれるはずだ。多分。
ワケ
∧_∧
( ・∀・)
⊂ ⊂ )
< < <
(_(_)
今日もテキスト漫画サイトのアプリ化について作業をしていました。このサイトのiPhoneアプリを出すにあたり避けられない問題として、AAずれがあります。
iOSとWindowsって、当たり前だけどフォントが違うから、AAずれるんだよね・・・
で、このAAズレの対策を色々検討していましたが、結局これといった決定的な策が出てきませんでした。
∧_∧ ∧_∧
_( ´∀`) (´∀` )
三(⌒), ノ⊃ ( >>1 )
 ̄/ /) ) | | |
. 〈_)\_) (__(___)
糞スレは・・
Mac/iPhone用:
∧_∧ ∧_∧
_( ´∀`) (´∀` )
三(⌒), ノ⊃ ( >>1 )
 ̄/ /) ) | | |
. 〈_)\_) (__(___)
糞スレは・・
どうしよ・・・
今日もテキスト漫画のサイトに手を加えていました。
今回は、テキスト漫画の並び順「更新順」「人気順」や、表示しているページ数、さらにログイン中に指定できる「自分専用のみ表示」のチェックボタンをセッションに保存して記憶するようにしました。
前は、例えば「更新順」で3ページ目を出しておいて、そのページのテキスト漫画を変更後、元の画面に戻ると「人気順」で1ページ目に戻ったりしましたが、ちゃんと元の「更新順」で3ページ目に戻るようになりました。
細かいところですが使いやすくなりました。
←
∧_∧
∧_∧・ω・`) ↑
↓ ( ・ω・`)・ω・`)
く| ⊂)ω・`)
(⌒ ヽ・`)
∪ ̄\⊃
今日は何事もない、平和な1日でした。
(´・ω・`)やあ
今日はテキスト漫画のサイトを改良していました。テキスト漫画のガワネイティブアプリを出すにあたり、操作性を向上させるための改良です。
今までテキスト漫画をコピーして使用する場合は、「1回だけ必要なコード」と「テキスト漫画を表示したい箇所に配置するコード」の二つをそれぞれコピーして貼り付ける必要がありました。
これを改善して、1回コピーリンクをクリックするだけでコピー出来るようになりました!
ブラウザによってはクリップボードへのコピーに対応していないものもあります。あなたのブラウザで出来るか試してみましょう!!
以下はコピーリンクをクリック後に貼り付けたテキスト漫画です!簡単!!
ヽ(`д´)ノ うわーん
ヾ(゚д゚*三*゚д゚)ノワァイ
ログイン機能が復活したよ
ヽ(´▽`)ノワーイ
|ハ,_,ハ
|´∀`’;/^l
|u”’^u;’ |
|∀ ` ミ
| ⊂ :,
| ミ
| 彡
| ,:’
|”~””∪
明日は昨日予定していた、画面のサイズ以外のスマホ判定方法を調べようと思います。
テキスト漫画のガワアプリを出すにあたって、既存のサイトのデザインをスマホ用に切り替える必要があります。
今回はその第一歩として、スマホの場合はサイトに適用しているCSSのほとんどを取り払うことにしました。
はい、ご覧のように背景の絵や色が消えましたね。ここからスマホ専用にデザインをして行きます。
スマホの判定は、画面の横幅640ピクセル以下の場合としています。コードは以下のようになります。ビューポートの設定をしてから、@media screen and … の部分で判定しています。PCでもウィンドウの幅を狭めると真っ白な画面になります。
<head>
<meta charset="utf-8">
<!-- ビューポートの設定 -->
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no">
<title>TextManga</title>
<style>
@media screen and (min-width: 641px) {
// ここにPC用のCSS
}
@media screen and (max-width: 640px) {
//ここにスマホ用のCSS
}
</style>
// 以下略
・・・
・・
・
横向きにしたらPC用のデザインに戻っちゃった・・・
画面のサイズ以外にもスマホを判定する方法ってあるのかしら?また明日調べよう。簡単に判定出来ると良いなぁ。
前回まででプログレスバーを含めたWebViewのガワアプリの基本的な部分を完成したつもりだったのですが、よく確認したところ、iPhoneXで画面下にわずかにWebページが表示されない隙間が出来ていました。
原因を調べまくったところ、どうやらcontentInsetという、領域内にスペースを自動で差し込む処理が存在したようです。そこで、その領域を取ることで本当の本当に、iPhoneXの隅から隅まで完全な全面表示になりました。
import UIKit
import WebKit
class ViewController: UIViewController {
private var _webView : WKWebView!
private var _hideStatusBar : Bool = false
private var _iPhoneX_Header : CGFloat = 0
private var _progressView: UIProgressView!
func iPhoneX() -> Bool {
guard #available(iOS 11.0, *) else {
return false
}
return UIApplication.shared.windows[0].safeAreaInsets != UIEdgeInsets.zero
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
// ステータスバーの高さを取得
_iPhoneX_Header = iPhoneX() ? UIApplication.shared.statusBarFrame.size.height : 0
// WKWebViewを位置指定して表示
let webC = WKWebViewConfiguration()
_webView = WKWebView(frame:CGRect(x:0, y: -_iPhoneX_Header, width:self.view.bounds.size.width, height:self.view.bounds.size.height + _iPhoneX_Header), configuration: webC)
//_webView.scrollView.contentInsetAdjustmentBehavior = .always
// ジェスチャー(フリック)による 進む や 戻る を許可
_webView.allowsBackForwardNavigationGestures = true
// WebViewの読込監視
_webView.addObserver(self, forKeyPath:"estimatedProgress", options:.new, context:nil)
// ステータスバーの非表示 ※ステータスバーの高さを取得する前に非表示にすると、ステータスバーの高さが取得できない
_hideStatusBar = true
self.setNeedsStatusBarAppearanceUpdate()
// テキスト漫画読み込み
let url : URL = URL(string: "https://minnano.app/textmanga/")!
let request : URLRequest = URLRequest(url: url)
_webView.load(request)
self.view.addSubview(_webView)
// ProgressView
_progressView = UIProgressView(frame: CGRect(x:0, y:0, width:self.view.bounds.size.width * 2, height:4))
_progressView.layer.position = CGPoint(x:0, y:self.view.bounds.size.height - 1)
_progressView.transform = CGAffineTransform(scaleX: 1.0, y: 2.0)
_progressView.progressTintColor = UIColor.green
_progressView.trackTintColor = UIColor.orange
self.view.addSubview(_progressView)
// 回転時の通知
NotificationCenter.default.addObserver(self, selector: #selector(ViewController.orientationChange(notification:)), name: NSNotification.Name.UIDeviceOrientationDidChange, object: nil)
}
deinit {
_webView?.removeObserver(self, forKeyPath: "estimatedProgress")
}
@objc
private func orientationChange(notification: NSNotification) {
let portrait : Bool = UIInterfaceOrientationIsPortrait(UIApplication.shared.statusBarOrientation)
// WebViewの表示調整
_webView.frame.origin = CGPoint(x:portrait ? 0 : -_iPhoneX_Header, y:portrait ? -_iPhoneX_Header : 0)
_webView.frame.size = CGSize(width:self.view.bounds.size.width + (portrait ? 0 : _iPhoneX_Header * 2), height:self.view.bounds.size.height + (portrait ? _iPhoneX_Header : 0))
_webView.scrollView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: portrait ? -_iPhoneX_Header * 4 / 5 : -_iPhoneX_Header / 2, right: 0)
//_webView.scrollView.contentInset = UIEdgeInsets(top: portrait ? _iPhoneX_Header : 0,
// left: portrait ? 0 : _iPhoneX_Header,
// bottom: 0,
// right: portrait ? 0 : _iPhoneX_Header)
// プログレスバーの表示調整
_progressView.frame.origin = CGPoint(x: 0, y: 0)
_progressView.frame.size = CGSize(width:self.view.bounds.size.width * 2, height:4)
_progressView.layer.position = CGPoint(x:0, y:self.view.bounds.size.height - 1)
}
// ステータスバーの非表示
override var prefersStatusBarHidden: Bool {
return _hideStatusBar
}
// WebViewの監視
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey: Any]?, context: UnsafeMutableRawPointer?) {
if("estimatedProgress" == keyPath){
if(_progressView != nil){
// 更新
let progress : Float = Float(_webView.estimatedProgress)
_progressView.setProgress(progress < 1.0 ? progress : 0.0, animated: progress < 1.0)
_progressView.alpha = progress < 1.0 ? 1.0 : 0.0 // 読み込みが完了したら非表示に
}
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
下記は上のコードのcontentInset処理部分の抜粋です。 UIEdgeInsetsで余白を調整しています。4 / 5 とか 1 / 2 は、どうしてそうなるのかはわからないのですが、ピッタリ画面端までWebが表示される値です。
誰かどうしてこうなるのか教えてください。
_webView.frame.origin = CGPoint(x:portrait ? 0 : -_iPhoneX_Header, y:portrait ? -_iPhoneX_Header : 0)
_webView.frame.size = CGSize(width:self.view.bounds.size.width + (portrait ? 0 : _iPhoneX_Header * 2), height:self.view.bounds.size.height + (portrait ? _iPhoneX_Header : 0))
_webView.scrollView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: portrait ? -_iPhoneX_Header * 4 / 5 : -_iPhoneX_Header / 2, right: 0)
ちょーすっきりした。
今日は、昨日の続きでプログレスバーの表示対応です。
以下ViewController.swiftのコードです。画面の下端に表示しました。ページ読み込み開始時はオレンジ色で、読み込むと共に緑色になって行きます。
import UIKit
import WebKit
class ViewController: UIViewController {
private var _webView : WKWebView!
private var _hideStatusBar : Bool = false
private var _iPhoneX_Header : CGFloat = 0
private var _progressView: UIProgressView!
func iPhoneX() -> Bool {
guard #available(iOS 11.0, *) else {
return false
}
return UIApplication.shared.windows[0].safeAreaInsets != UIEdgeInsets.zero
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
// ステータスバーの高さを取得
_iPhoneX_Header = iPhoneX() ? UIApplication.shared.statusBarFrame.size.height : 0
// WKWebViewを位置指定して表示
_webView = WKWebView(frame:CGRect(x:0, y: -_iPhoneX_Header, width:self.view.bounds.size.width, height:self.view.bounds.size.height + _iPhoneX_Header))
// ジェスチャー(フリック)による 進む や 戻る を許可
_webView.allowsBackForwardNavigationGestures = true
// WebViewの読込監視
_webView.addObserver(self, forKeyPath:"estimatedProgress", options:.new, context:nil)
// ステータスバーの非表示 ※ステータスバーの高さを取得する前に非表示にすると、ステータスバーの高さが取得できない
_hideStatusBar = true
self.setNeedsStatusBarAppearanceUpdate()
// テキスト漫画読み込み
let url : URL = URL(string: "https://minnano.app/textmanga/")!
let request : URLRequest = URLRequest(url: url)
_webView.load(request)
self.view.addSubview(_webView)
// ProgressView
_progressView = UIProgressView(frame: CGRect(x:0, y:0, width:self.view.bounds.size.width * 2, height:4))
_progressView.layer.position = CGPoint(x:0, y:self.view.bounds.size.height - 1)
_progressView.transform = CGAffineTransform(scaleX: 1.0, y: 2.0)
_progressView.progressTintColor = UIColor.green
_progressView.trackTintColor = UIColor.orange
self.view.addSubview(_progressView)
// 回転時の通知
NotificationCenter.default.addObserver(self, selector: #selector(ViewController.orientationChange(notification:)), name: NSNotification.Name.UIDeviceOrientationDidChange, object: nil)
}
deinit {
_webView?.removeObserver(self, forKeyPath: "estimatedProgress")
}
@objc
private func orientationChange(notification: NSNotification) {
let portrait : Bool = UIInterfaceOrientationIsPortrait(UIApplication.shared.statusBarOrientation)
// WebViewの表示調整
_webView.frame.origin = CGPoint(x:portrait ? 0 : -_iPhoneX_Header, y:portrait ? -_iPhoneX_Header : 0)
_webView.frame.size = CGSize(width:self.view.bounds.size.width + (portrait ? 0 : _iPhoneX_Header * 2), height:self.view.bounds.size.height + (portrait ? _iPhoneX_Header : 0))
// プログレスバーの表示調整
_progressView.frame.origin = CGPoint(x: 0, y: 0)
_progressView.frame.size = CGSize(width:self.view.bounds.size.width * 2, height:4)
_progressView.layer.position = CGPoint(x:0, y:self.view.bounds.size.height - 1)
}
// ステータスバーの非表示
override var prefersStatusBarHidden: Bool {
return _hideStatusBar
}
// WebViewの監視
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey: Any]?, context: UnsafeMutableRawPointer?) {
if("estimatedProgress" == keyPath){
if(_progressView != nil){
// 更新
let progress : Float = Float(_webView.estimatedProgress)
_progressView.setProgress(progress < 1.0 ? progress : 0.0, animated: true)
_progressView.alpha = progress < 1.0 ? 1.0 : 0.0 // 読み込みが完了したら非表示に
}
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
iPhoneXの全面表示や画面の回転にも対応しています。
テキスト漫画はその名の通りテキストばかりで読み込み早いから、
せっかく作ったけどプログレスバーは要らないかなぁ・・・