2016-11-02 3 views
5

Это то, что мой взгляд контроллер должен быть:View контроллер происхождения меняется каждый раз, когда он подарил

enter image description here

Это то, что иногда:

enter image description here

I хотите отобразить контроллер вида в круге, однако, почти каждый раз, когда контроллер вида в круге (ResultViewController), это место отличается, хотя его свойства совсем не меняются. Вот мой код:

func openCircle(withCenter center: CGPoint, dataSource: ([Items], Int, String)){ 
    self.addCircle(withCenter: center, dataSource: dataSource) 
} 

func addCircle(withCenter circleCenter: CGPoint, dataSource: ([Items], Int, String)) { 

    let longerSide = fmax(view.frame.size.height, view.frame.size.width) 
    let shorterSide = fmin(view.frame.size.height, view.frame.size.width) 

    let circleRadius = longerSide/2 
    var resultViewOrigin = CGPoint() 
    var resultViewSize = CGSize() 

    if UIDevice.current.userInterfaceIdiom == .pad { 

     let rectWidth = shorterSide/2 
     let rectHeight = sqrt(abs(circleRadius * circleRadius - rectWidth * rectWidth)) + view.frame.size.height - circleCenter.y 
     resultViewSize = CGSize(width: rectWidth, height: rectHeight) 
     resultViewOrigin = CGPoint(x: (view.frame.size.width - rectWidth)/2, y: view.frame.size.height - rectHeight) 

    } else { 
     resultViewOrigin = CGPoint(x: 0.0, y: 0.0) 
     resultViewSize = CGSize(width: view.frame.size.width, height: view.frame.size.height) 
    } 

    let resultViewController = UIStoryboard(name: "Main", bundle: Bundle.main).instantiateViewController(withIdentifier: "ResultVC") as! ResultViewController 
    resultViewController.transitioningDelegate = self 
    resultViewController.modalPresentationStyle = .custom 
    resultViewController.dataSource = dataSource 
    resultViewController.view.frame = CGRect(origin: resultViewOrigin, size: resultViewSize) 

    transition.circle = UIView() 
    transition.startingPoint = circleCenter 
    transition.radius = circleRadius 
    transition.circle.frame = circleFrame(radius: transition.radius, center: transition.startingPoint) 

    present(resultViewController, animated: true) 
} 

Он хорошо работает на iPhone, а не на iPad, в чем проблема?

+0

Вы можете включить скриншот нужного экрана? (от iPhone) – Danoram

+0

@ Danoram извините за поздний ответ, см. edit –

+0

Можете ли вы взять лучшие фотографии? Я не понимаю, в чем проблема. И, возможно, выделить их? – Honey

ответ

3

Я нашел проблему, на самом деле это недостающее ограничение на класс обычного регулярного размера вызвало эту проблему, я исправил ее, добавив расстояние до нижней схемы макета к части, которая использовалась для устранения неуместности.

Спасибо всем за вашу идею.

1

Вы можете использовать вид контейнера вместо представления контроллера вида. Вы можете создавать их программно или в построителе интерфейса (см. Apple docs).

+0

У меня есть анимация, прикрепленная к представленному контроллеру представления, просмотр контейнера не является оптимальным решением для меня –

+0

Вид контейнера - обычный вид. Вы можете показать или скрыть их с помощью анимации просмотра. Почему это не оптимально для вас? – clemens

+0

Не просто анимация, а также множество данных и соединений, переход от контроллера представления к представлению контейнера слишком высок. –

Смежные вопросы