73516


SDKの関数に下記のコードを書いてみましたが、うまく動きません。  
お力をお貸しいただけませんでしょうか。

[code]

    let myBoundSize: CGSize = UIScreen.main.bounds.size
    var myView = UIView(frame: CGRect(x: 0, y: 0, width: myBoundSize.width, height: myBoundSize.height))
    myView.backgroundColor = UIColor.green
    myView.isHidden = true
    
[/code]

(追記)  
呼び出し元はお客様なため、こちら側でなんとかViewを上から貼り付けて、処理が終わったら制御を戻すって動作をしたいです。

[code]

    lass dummy: NSObject, WKUIDelegate, WKNavigationDelegate {
    
         func init(){
         }
        
         func login() {
            
            let myBoundSize: CGSize = UIScreen.main.bounds.size
            var myView = UIView(frame: CGRect(x: 0, y: 0, width: myBoundSize.width, height: myBoundSize.height))
            myView.backgroundColor = UIColor.green
            myView.isHidden = true
         }
    } 
    
[/code]


CC BY-SA 4.0
2021-01-23T02:46:12.773
73513
2021-01-23T06:32:07.003
2021-01-23T06:32:07.003
3060
43646
question
swift
SwiftでSDKを作成してます。呼び出し元から引数をもらわずにViewを表示させて画面の制御をしたいです。


端的に言うと「呼び出し元から引数をもらわずにViewを表示させ」「なんとかViewを上から貼り付けて、処理が終わったら制御を戻す」と言うのは、

**事実上無理**

です。

(現在Apple以外からSDKと称して提供されているライブラリの中には「現在の」実装上の詳細に依存する裏技を駆使して、「事実上無理」なことを実現している場合があります。そう言った裏技で良いのであれば、もしかしたら実現する方法があるかもしれませんが、ほんの少しAppleがiOSの中身をいじると動かなくなるものが結構あって、SDKユーザの側はiOSのバージョンアップのたびに右往左往させられると言うことになっています。「そんな裏技でもいいから、可能性があるなら方法を知りたい」と言う場合は、他の方の回答をお待ちください。この回答の中ではそう言ったやり方には触れません。)

現在の期待される動作が「画面を緑にしたい」とのことですが、あなたの現在のコードではせっかく作った背景が緑色のUIViewを`isHidden =
true`で隠してしまっている上に、作ったUIViewを全く使わず(どこにも`addSubview`せず)に捨ててしまっていますので、それが表示されることは決してありません。

「作ったUIViewをどこかに置く」と言う方法をとる限り、「どこに置くのか」を引数でもらわない限り、実現することは不可能でしょう。

* * *

呼び出し元に関する情報が一切いただけていませんが、例えば`UIViewController`のextensionとして機能提供することは考えておられないのでしょうか?

[code]

    extension UIViewController {
        public func login() {
            let myBoundSize: CGSize = UIScreen.main.bounds.size
            let myView = UIView(frame: CGRect(x: 0, y: 0, width: myBoundSize.width, height: myBoundSize.height))
            myView.backgroundColor = UIColor.green
            myView.isHidden = false //<-???
            
            self.view.addSubview(myView)
        }
    }
    
[/code]

SDKを使う側のコード:

[code]

    class ViewController: UIViewController {
    
        //...
        
        override func viewDidLoad() {
            super.viewDidLoad()
            // Do any additional setup after loading the view.
            self.login()
        }
    
        //...
    
    }
    
[/code]

また、このやり方なら、単にUIViewを追加するだけでなく、他のview controllerに遷移させると言ったことも可能になります。


CC BY-SA 4.0
2021-01-23T04:12:58.020
73516
2021-01-23T04:12:58.020
13972
73513
answer