UIIViewの背景色を透過したい。
https://qiita.com/takehiro224/items/dc5903ae42f288ccd5f7
の記事を参考にメニューを作成しました。
記事内では背景色を Opacity:0.5に設定するように書かれています。
が、Xcode(IDE)のStroyboardにがOpcaityは見当たらなくてAlphaしかありません。
そこの値を0.5にするも画面が真っ黒のままです。
その他にも...
試したこと
・Storyboard側のAplphaの数値を下げてみた
・Storyboard側のUIColorのOpacityの数値を下げてみた
・レイヤーの順番を確認
と試してBuildするも背景色は真っ黒です。
どうやったら背景色を透過できるのでしょうか。。
import UIKit class MenuViewController: UIViewController { @IBOutlet weak var menuView: UIView! override func viewDidLoad() { super.viewDidLoad() } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) // メニュー画面の位置 let menuPosition = self.menuView.layer.position // 初期位置設定 self.menuView.layer.position.x = -self.menuView.frame.width // 表示アニメーション UIView.animate( withDuration: 0.1, delay: 0, options: .curveEaseOut, animations: { self.menuView.layer.position.x = menuPosition.x }, completion: { bool in }) } // メニュー外をタップした場合に非表示にする override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) { super.touchesEnded(touches, with: event) for touch in touches { if touch.view?.tag == 1 { UIView.animate( withDuration: 0.2, delay: 0, options: .curveEaseIn, animations: { self.menuView.layer.position.x = -self.menuView.frame.width }, completion: { bool in self.dismiss(animated: true, completion: nil) } ) } } } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } }
// コード① let blackColor = UIColor.black let transparentBlackColor = blackColor.setAlpha(alpha: 0.5) self.view.backgroundColor = transparentBlackColor
コード①だと真っ黒になります。
UIColor.redにすると 赤黒になります。
何の黒色が残っているのかがわかりません。。
実際のコードではPresentationは Full Screenとなっています。

もとのviewControllerの背景色が黒なんじゃないですか?
戻るセグエも見直されたほうが良いと思います。
> もとのviewControllerの背景色が黒なんじゃないですか?
Stroyborad側でviewControllerの背景色を確認するも色の設定項目もなく、.swift側でも同様に色についての記述は見当たらないです。
> 戻るセグエも見直されたほうが良いと思います。 
こちらはどういう意味でしょうか。
閉じる処理のことでしょうか。
self.view.backgroundColor = UIColor.blue
Storyboardのself.viewの設定項目にbackgroundがないんでしょうか?
セグエ
「あまり理解していない人が初心者向けに丁寧な記事を書いて、おかしなやり方を広めてしまっていることもあります。」=>
https://teratail.com/questions/296588#reply-419030
元のviewController → 遷移元のviewController
> self.view.backgroundColor = UIColor.blue
これだと背景色確かに変わります。
ただopacityを設定すると黒い色が残った色になってしまいます。。
(なので追加コード①にしても真っ黒のままです。。赤にすれば赤黒になります。)
 >Storyboardのself.viewの設定項目にbackgroundがないんでしょうか?
あります。
白色に設定しても赤色に設定しても効きません。。
> セグエ
こちらの記事さっき読みました。
コピペしていたので詳細確認していなかったです。。
ここもう少し教えてください。
閉じる処理ではなく、前画面からの遷移のことでしょうか。。
Presentationは実際はFull screenにしております。
セグエは確認する限りだと前画面→メニューのみとなっております。
その他にも実際のコードは色々な処理を書いています。
背景色が黒くなる原因に関して必要であれば追記いたします。
上にあるviewControllerの背景色を透明にしているのだから、modal遷移なら遷移元のviewControllerが見えるはずで、その色が黒なんじゃないですかとずっと言ってます。
self.view.backgroundColor = .blue とstoryboardのviewのbackgroundColorは同じ設定項目なので、時間的に新しい方で上書きされます。
セグエの件はそれで戻ってきてないなら気にしないでください。
>上にあるviewController
こちらはMenuViewControllerのことでしょうか?
現在MenuViewControllerの背景色は白色でAlpha:1.0に変更しています。(質問投稿時と変更しています。背景色を確認するためです。)
それでも背景色は黒色になります、、、
(Aplpha:1.0なので透過はしていないはずです。)
>modal遷移なら遷移元のviewControllerが見えるはずで、その色が黒なんじゃないですかとずっと言ってます。
遷移元のBackgroundColorはSystem BackGroundColorでAlpha:1.0となっています。
コンテンツもUItableView(セルの色も白)で黒っぽくないです、、
回答内容間違えていましたらすいません、、
すいません、、
回答内容一部修正します。
> もとのviewControllerの背景色が黒なんじゃないですか?
こちら回答時点で『もとの』を見逃していました。。
現在は『もとの』ViewControllerにも        
self.view.backgroundColor = UIColor.white
を設定していますが結果は変わらずでした。。
あと遷移元のViewControllerにはNavigationControllerがあります。
こちらが原因でしょうか。。
画像追加しますが確かに『もとの』ViewControllerの上部には黒っぽい背景見えます。。
そちらの環境はわかりませんので回答はできません。
ご自分でviewControllerを2枚用意し、例えば赤のViewControllerから透明のViewControllerにモーダル遷移するサンプルを作られてはどうでしょうか?それができたら透明なViewControllerに青のViewを載せて遷移して、それができたらNavigationControllerをつけて....一つ一つ検証されてはみては?
はい。
とりあえず
1. 赤のViewControllerから透明のViewControllerにモーダル遷移するサンプル作成
2. 透明なViewControllerに青のViewを載せて遷移
3. NavigationControllerを追加で実装
をやって確認してみます。
確認しました!
原因というか黒色の解決方法はわかりました。。
(黒色はViewControllerのデフォルトの背景色っぽいです。)
(実際のアプリの)解決策としては最後のコメントにあった物のを応用しました。
ベースのViewの背景色を白に設定。
それを透過。(例:Alpha 0.5)
このやり方で合っていますでしょうか。

回答1件
あなたの回答
tips
プレビュー










