Scrollen Sie UILabel wie ein Festzelt in einer Untersicht

Habe ich ein UILabel in der Haupt-Ansicht mit text - "Sehr Sehr langer text". Die Breite wäre 142, aber ich habe Sie verkürzt auf 55.

Grundsätzlich möchte ich zur Umsetzung ein Festzelt geben Sie scrollen, so schrieb ich code und fügen Sie ihn auf eine Untersicht, und animieren Sie es, innerhalb der Schranken der Sicht.

CODE --

    CGRect tempLblFrame = _lblLongText.frame;
    UIView *lblView = [[UIView alloc] initWithFrame:tempLblFrame];

    //Add label to UIView at 0,0 wrt to new UIView
    tempLblFrame.origin.x = 0;
    tempLblFrame.origin.y = 0;

    [_lblLongText setFrame:tempLblFrame];
    [_lblLongText removeFromSuperview];
    [lblView addSubview:_lblLongText];

    //SetClipToBounds so that if label moves out of bounds of its superview, it wont be displayed
    [lblView setClipsToBounds:YES];
    [lblView setBackgroundColor:[UIColor cyanColor]];
    [self.view addSubview:lblView];

Nach diesem bekomme ich diese Ausgabe auf dem simulator --> Scrollen Sie UILabel wie ein Festzelt in einer Untersicht

Tritt das problem auf wenn ich versuche eine Animation mit diesem code -

    tempLblFrame.origin.x = -_lblLongText.intrinsicContentSize.width;        
    [UIView animateWithDuration:2.0 delay:1.0 options:UIViewAnimationOptionCurveLinear
                     animations:^{
                         [_lblLongText setFrame:tempLblFrame];
                     }
                     completion:^(BOOL finished) {
                         NSLog(@"completed");
                     }];

Ich hatte gehofft, ich würde die gesamte "Sehr Sehr langer text", vielmehr nur "Sehr..." Schriftrollen von Links nach rechts.

Um dieses Problem zu lösen fügte ich eine Zeile code -

    //Add label to UIView at 0,0 wrt to new UIView
    tempLblFrame.origin.x = 0;
    tempLblFrame.origin.y = 0;

    tempLblFrame.size.width = _lblLongText.intrinsicContentSize.width; //THIS LINE WAS ADDED

    [_lblLongText setFrame:tempLblFrame];
    [_lblLongText removeFromSuperview];
    [lblView addSubview:_lblLongText];

Ich dachte, der volle text wird in der neu hinzugefügten UIView und es würde Blättern richtig. Aber läuft im simulator hat mir dieses --

Scrollen Sie UILabel wie ein Festzelt in einer Untersicht

Wieder und "Sehr..." war das scrollen von Links nach rechts.

Was mache ich falsch? Bitte um Hilfe!!!

BEARBEITEN

Offenbar der Täter war AutoLayout.

Ich habe keine Ahnung, warum, aber sobald ich nicht aktiviert "Use Autolayout" für die Ansicht
in der XIB -, angefangen hat alles wie erwartet funktioniert. Einstellung
tempLblFrame.Herkunft.x = -_lblLongText.intrinsicContentSize.Breite; war
richtig funktioniert und so war die schriftrolle.

Jede Erklärung hierzu!!?

  • warum sind Sie nicht mit opensource-Steuerung, die alles hat, behoben? github.com/cbpowell/MarqueeLabel
  • Erstens wollte ich versuchen, etwas auf meinem eigenen. Zweitens, ich habe, um änderungen an einem bestehenden Projekt, das eine Menge von labels. Anstelle des Entfernens jedes Etikett von jedem xib (iPad, iPhone), ich wollte versuchen, eine alternative, die weniger Aufwand
InformationsquelleAutor Tushar Koul | 2013-06-25
Schreibe einen Kommentar