omz:forum

    • Register
    • Login
    • Search
    • Recent
    • Popular

    Welcome!

    This is the community forum for my apps Pythonista and Editorial.

    For individual support questions, you can also send an email. If you have a very short question or just want to say hello — I'm @olemoritz on Twitter.


    Bounds vrs Frame Center etc in ui

    Pythonista
    frame center bounds
    3
    29
    20219
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • JonB
      JonB last edited by

      Feel free to use or modify this, as long as you don't call it preflight :)

      I'll have to try this again (admittedly I didn't test sheet in this final form). For the 768x1024 devices, this should return something like 768x768 when title bar is hidden, and 704x704 when it is not. From what I can deduce, sheet present modes have to work in both orientations, so your size is limited to the narrowest dimension of your screen, minus the title bar height (if title bar is shown).

      Can you run my little script in https://forum.omz-software.com/topic/1618/any-ios-device/7 and tell me what you get in both orientations on your Ipad Pro? What did this script return? I suspect my logic could be off for some of the newer iPhones as well.

      Phuket2 2 Replies Last reply Reply Quote 0
      • Phuket2
        Phuket2 @JonB last edited by

        @JonB , lol...deal

        IPad Pro
        ('full_screen', True) 0 (0.00, 0.00, 1024.00, 1366.00)
        ('full_screen', False) 0 (0.00, 64.00, 1024.00, 1302.00)
        ('panel', True) 0 (0.00, 0.00, 1024.00, 1270.00)
        ('panel', False) 0 (0.00, 0.00, 1024.00, 1270.00)
        complete

        Will send iPhone 6s soon

        Phuket2 1 Reply Last reply Reply Quote 0
        • Phuket2
          Phuket2 @Phuket2 last edited by

          @JonB
          iPhone 6s
          ('full_screen', True) 0 (0.00, 0.00, 375.00, 667.00)
          ('full_screen', False) 0 (0.00, 64.00, 375.00, 603.00)
          ('panel', True) 0 (0.00, 0.00, 375.00, 579.00)
          ('panel', False) 0 (0.00, 0.00, 375.00, 579.00)
          complete

          1 Reply Last reply Reply Quote 0
          • Phuket2
            Phuket2 @JonB last edited by

            @JonB , do you need it done on iPad Air 2?

            1 Reply Last reply Reply Quote 0
            • Phuket2
              Phuket2 last edited by

              I am pretty sure I concede. I thought if we knew the sizes before present we could force ui.View to do the right thing. I have been testing and testing...
              Without present being called you just can't get it right. Well from what I can see.
              You can say layout, but it does not matter. Layout is being called after present. So same thing.
              So I concede, I am wrong. The magic preflight fixes nothing. It's in the Pythonista code.
              I get it now.
              Either you have a custom class and support layout, or if you are making a view ad hoc to display, to be 100% you need to present it first.

              Not ideal, but that is the way it is I guess.

              1 Reply Last reply Reply Quote 0
              • Phuket2
                Phuket2 last edited by

                I can't remember the old Mac toolbox api , but we had something like suspend drawing. But basically, you could turn off any screen rendering. But the so called 'view'/window was already created.

                It was like a transaction (I think I mentioned it last night)
                But was something like

                Begin draw
                Do your stuff
                End draw
                Update

                But It could be
                v.ui.View()
                v.present('sheet', suspend_upates = True)
                v.make_your_view()
                v.resume_updates = True
                Or v.suspend_updates = false # causes a redraw

                Anyway something like that. Just an illustration

                1 Reply Last reply Reply Quote 0
                • JonB
                  JonB last edited by

                  Ui.animate does that. Anything you put inside the function sent to ui.animate will happen at once. Just set the time to 0 to have it happen instantly. IIRC anything happening in the main ui thread also will appear instantly(so inside a non backgrounded button action f

                  Is your view initting so complicated that you can see the subviews getting added, etc?or example), or perhaps using on_main_thread.

                  Phuket2 1 Reply Last reply Reply Quote 0
                  • Phuket2
                    Phuket2 @JonB last edited by

                    @JonB , no is about delays etc. I see you said before that you don't care about 50ms black when you present your view then build it. What I have done on the ipad pro , there is no delay. It's so quick. I am just being anal.
                    I would just like it to happen the right way. I am sure in your job you are the same way when you are doing Java or whatever languages you work in.
                    I know people are a lot more fee spirited when it comes to Python (hippies 😳) I don't know why. It's very powerful. But maybe omz has show the real power of Python, by providing a great ui as well as tools.
                    I know good Python programmers are often in the top 3 or 4 best paid programmers behind the c variations and Java. Not that I am looking for a job. But I am sure 95++ % is backend stuff. Ok, I even lost my train of thought here.
                    I just like to see things right. I know I am not the best judge of that with my lack of experience in Python. But it's a journey. Have to keep questioning things. Same way I learnt eons ago.

                    But about ui.animate. I can't see that would change anything for adhoc ui.Views() first you need a custom class. Secondly it will be presented already

                    1 Reply Last reply Reply Quote 0
                    • JonB
                      JonB last edited by

                      You can set view.hidden =True, which sort of does what you are asking, at least for initial setup. You will see the empty view while things are prepared, but you could add an ActivityIndicator

                      Also, ui.delay (not animate like i thought) will cause everything to happen at once -- the ui is not updated until the delayed function exits.

                      See this example, where I show 4 methods. For a really slow setup function, you see the subviews get added one by one using the basic method (present, then setup the view) which is undesirable. Using ui.delay is nice, and you can show an activity indicator while the view sets up. You can use hidden on your root view, though it shows black while setting up. So, you can have a subview of root as your main view, and just hide the subview. This method also lets you add an activity indicator. This is probably my favorite approach. You could even write it as a context manager.

                      https://gist.github.com/9ad6220833b3ee0097e2

                      1 Reply Last reply Reply Quote 0
                      • First post
                        Last post
                      Powered by NodeBB Forums | Contributors