Device Erkennung durch if Anweisung

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Device Erkennung durch if Anweisung

    In diesem Script bekommen Objekte statische Koordinaten.
    Das Problem ist, dass ich nicht weiß wie ich folgendes Problem lösen kann: Das Erkennen zwischen iPhone4/iPhone5/iPhone6/iPhone6 Plus, also das jedes Device eigene Koordinaten bekommt.

    - (void)willAnimateRotationToInterfaceOrientation:
    (UIInterfaceOrientation)toInterfaceOrientation
    duration:(NSTimeInterval)duration
    {
    if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft ||
    toInterfaceOrientation == UIInterfaceOrientationLandscapeRight)

    {
    eins.frame = CGRectMake(20, 70, 115, 115);
    zwei.frame = CGRectMake(250, 70, 115, 115);
    drei.frame = CGRectMake(522, 70, 115, 115);
    vier.frame = CGRectMake(20, 230, 115, 115);
    fuenf.frame = CGRectMake(250, 230, 115, 115);
    sechs.frame = CGRectMake(522, 230, 115, 115);
    }
    else
    {
    eins.frame = CGRectMake(30, 90, 115, 115);
    zwei.frame = CGRectMake(250, 90, 115, 115);
    drei.frame = CGRectMake(30, 300, 115, 115);
    vier.frame = CGRectMake(250, 300, 115, 115);
    fuenf.frame = CGRectMake(30, 530, 115, 115);
    sechs.frame = CGRectMake(250, 530, 115, 115);
    }
    }
  • Das ist in der Tat mit reinem Autolayout schwierig. Allerdings solltest Du beim Layout nicht von festen Displaygrößen ausgehen und die entsprechenden Layout-Methoden (z. B. viewWillLayoutSubviews) verwenden.Ich würde beim Layout die vorhandene Fläche in 6 = 3 × 2 (oder 2 × 3) gedachte Rechtecke unterteilen. Welche Dimension Du dabei in drei beziehungsweise zwei Abschnitte unterteilst entscheidest Du anhand der Seitenlänge. Die Rechtecke verwendest Du dann als Koordinaten der Frames. Statt 6 Outlets kannst Du auch eine Outlet-Collection, oder wenn die Reihenfolge wichtig ist, die Subviews verwenden.

    Dafür kannst Du auch einen Collectionview verwenden.
    „Meine Komplikation hatte eine Komplikation.“
  • macmoonshine schrieb:

    gritsch schrieb:

    ja, warum nicht?

    Horizontal hat er drei und vertikal zwei Views nebeneinander.


    das "problem" dürfte wohl eher sein dass es je nach ausrichtung ein mal 2x3 und dann 3x2 icons sind.
    die würde ich aber auch nicht manuell im interface platzieren sondern über ein eigenes UI-element.
    unter OS X gibts dafür ja zb NSMatrix. wenns sowas unter iOS nicht gibt ist es ja schnell geschrieben und auch viel flexibler (ab einer ebstimmten bildschirmgröße (oder per benutzereinstellungen) kann man dann auch mal 5x4 oder 6x4 icons anzeigen).

    evenutell könnten auch die size-classes was bringen (kenne mich damit aber nicht aus, hab nur mal kurz davon gehört dass es sie gibt ;-))
  • gritsch schrieb:

    das "problem" dürfte wohl eher sein dass es je nach ausrichtung ein mal 2x3 und dann 3x2 icons sind.

    Genau das meinte ich damit :)

    gritsch schrieb:

    die würde ich aber auch nicht manuell im interface platzieren sondern über ein eigenes UI-element.

    Das finde ich auch am saubersten. Wenn die Ausrichtung anhand der Seitenlängen anstatt der Geräteausrichtung erfolgt, ist das Ganze auch noch einen Ticken flexibler. ;)

    gritsch schrieb:

    unter OS X gibts dafür ja zb NSMatrix. wenns sowas unter iOS nicht gibt ist es ja schnell geschrieben und auch viel flexibler (ab einer ebstimmten bildschirmgröße (oder per benutzereinstellungen) kann man dann auch mal 5x4 oder 6x4 icons anzeigen).

    Eben: Collectionviews

    gritsch schrieb:

    evenutell könnten auch die size-classes was bringen (kenne mich damit aber nicht aus, hab nur mal kurz davon gehört dass es sie gibt ;-))

    Hatte ich auch erst dran gedacht, aber leider erlauben die auf dem iPad keine Unterscheidung nach der Seitenlänge. Da haben beide Seiten die Klasse Regular.
    „Meine Komplikation hatte eine Komplikation.“
  • Hi,

    das ist immer das Problem dem Design zu erklären, dass man gerne eine Regel hätte wie die Positionen und Grössen zu berechnen sind und nicht absolute Positionen.
    Eine tolle Regel für das UI Design ist z.B. der "Goldene Schnitt". Autolayout kann das auch, aber wenn man grundsätzliche Darstellungsänderungen von Hochformat zu Querformat benötigt man 2 xib files. Deswegen lege ich die Contraints entweder im code an oder, wenn es sich um eine einfache Aufteilung handelt, rechne ich "layoutSubviews" bzw viewDidLayout...