Frage

Ich suche eine perspektivische Transformation auf einem UIView (wie gesehen in Coverflow)

auszuführen

Ist anyonew wissen, ob dies möglich ist?

Ich untersuchte habe mit CALayer und haben durch alle pragmatische Programmierer Core Animation Podcasts laufen, aber ich bin immer noch nicht klarer, wie man diese Art zu erstellen, die auf einem iPhone von verwandeln.

Jede Hilfe, Zeiger oder Codebeispiel Schnipsel wirklich geschätzt werden würde!

War es hilfreich?

Lösung

Wie Ben sagte, müssen Sie mit der UIView der Schicht arbeiten, eine CATransform3D mit der Rotation der Schicht durchzuführen. Der Trick bekommen Perspektive arbeiten, wie hier beschrieben, ist direkt an Zugriff einer der Matrixzellen der CATransform3D (M34). Matrix Mathe ist meine Sache nie gewesen, also kann ich nicht genau erklären, warum das funktioniert, aber es funktioniert. Sie werden für Ihre erste transformieren, um diesen Wert zu einem negativen Fraktion festlegen müssen dann anwenden, um Ihre Schicht Rotation dass verwandelt. Sie sollten auch in der Lage sein, folgendes zu tun:

UIView *myView = [[self subviews] objectAtIndex:0];
CALayer *layer = myView.layer;
CATransform3D rotationAndPerspectiveTransform = CATransform3DIdentity;
rotationAndPerspectiveTransform.m34 = 1.0 / -500;
rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, 45.0f * M_PI / 180.0f, 0.0f, 1.0f, 0.0f);
layer.transform = rotationAndPerspectiveTransform;

die die Schicht von Grund auf für jede Drehung Transformations umbaut.

Ein vollständiges Beispiel (mit Code) kann

Andere Tipps

Sie können nur direkt angewendet Transformationen (nur Quarz, 2D) Core Graphics auf eine Eigenschaft verwandeln die UIView verwenden. Um die Auswirkungen in Coverflow zu bekommen, müssen Sie CATransform3D verwenden, die in 3-D-Raum angewandt werden, und so können Sie die perspektivische Ansicht Sie wollen. Sie können nur CATransform3Ds auf Ebene anwenden, nicht Ansichten, so dass Sie diese auf Schichten zu wechseln gehst zu haben.

Überprüfen Sie die „CovertFlow“ Probe aus, die mit Xcode kommt. Es ist Mac-only (also nicht für das iPhone), aber viele der Konzepte übertragen gut.

können Sie erhalten genauen Carousel Effekt mit iCarousel SDK.

Sie können uns einen Cover Flow Effekt auf iOS erhalten durch die wunderbare und kostenlose iCarousel Bibliothek. Sie können es herunterladen von https://github.com/nicklockwood/iCarousel und-Drop in Ihr Xcode Projekt relativ leicht durch eine Brückenkopf Zugabe (in Objective-C geschrieben).

Wenn Sie nicht Objective-C-Code zu einem Swift-Projekt vor hinzugefügt haben, gehen Sie folgendermaßen vor:

  • Herunterladen iCarousel und entpacken
  • Gehen Sie in den Ordner, den Sie entpackt, seine iCarousel Unterordner öffnen, wählen Sie dann iCarousel.h und iCarousel.m und ziehen Sie sie in Ihr Projekt Navigation - dass der linke Bereich in Xcode ist. Direkt unter Info.plist ist in Ordnung.
  • Überprüfen Sie „Elemente kopieren, wenn nötig“, dann auf Fertig stellen.
  • Xcode werden Sie mit der Nachricht aufgefordert, „Möchten Sie eine Objective-C Überbrückung Header konfigurieren?“ Klicken Sie auf „Erstellen Bridging Header“ Sie sollten eine neue Datei in Ihrem Projekt mit dem Namen Yourprojectname-Bridging-header.h sehen.
  • Fügen Sie diese Zeile in die Datei: #import "iCarousel.h"
  • Sobald Sie iCarousel zu Ihrem Projekt hinzugefügt haben, können Sie es benutzen.
  • Stellen Sie sicher, dass Sie entsprechen sowohl den iCarouselDelegate und iCarouselDataSource Protokolle.

Swift 3 Beispielcode:

    override func viewDidLoad() {
      super.viewDidLoad()
      let carousel = iCarousel(frame: CGRect(x: 0, y: 0, width: 300, height: 200))
      carousel.dataSource = self
      carousel.type = .coverFlow
      view.addSubview(carousel) 
    }

   func numberOfItems(in carousel: iCarousel) -> Int {
        return 10
    }

    func carousel(_ carousel: iCarousel, viewForItemAt index: Int, reusing view: UIView?) -> UIView {
        let imageView: UIImageView

        if view != nil {
            imageView = view as! UIImageView
        } else {
            imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 128, height: 128))
        }

        imageView.image = UIImage(named: "example")

        return imageView
    }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top