2016-11-02 18 views
5

To właśnie mój widok kontroler powinien być:Zobacz kontroler pochodzenie zmienia się za każdym razem, gdy przedstawił

enter image description here

To, co czasami jest:

enter image description here

I chcesz wyświetlić kontroler widoku w kole, jednak prawie za każdym razem, gdy kontroler widoku w kręgu (ResultViewController) jest prezentowany, jego miejsce jest inne, choć jego właściwości w ogóle się nie zmieniają. Oto mój kod:

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) 
} 

Działa dobrze na iPhone, a nie na iPadzie, na czym polega problem?

+0

Czy można dołączyć zrzut ekranu żądanego ekranu? (z iPhone'a) – Danoram

+0

@Danoram przepraszam za spóźnioną odpowiedź, zobacz edycję –

+0

Czy możesz zrobić lepsze zdjęcia? Nie rozumiem, o co chodzi. I ewentualnie wyróżnić je? – Honey

Odpowiedz

3

Znalazłem problem, to w rzeczywistości brakujące ograniczenie w regularnej klasie wielkości spowodowało ten problem, naprawiłem go, dodając odstęp do dolnego przewodnika układu do części, która kiedyś została zgubiona.

Dziękuję wszystkim za Twój pomysł.

1

Zamiast widoku kontrolera widoku można użyć widoku kontenera . Możesz je utworzyć programowo lub w narzędziu do budowania interfejsu (patrz Apple docs).

+0

Mam animacje dołączone do przedstawionego kontrolera widoku, widok kontenera nie jest optymalnym rozwiązaniem dla mnie –

+0

Widok kontenera to zwykły widok. Możesz je wyświetlać lub ukrywać za pomocą animacji widoku. Dlaczego nie jest dla ciebie optymalna? – clemens

+0

Nie tylko animacje, ale także wiele danych i połączeń, migracja z kontrolera widoku do widoku kontenera jest zbyt wysoka. –

Powiązane problemy