2016-05-04 25 views
3

Ich füge Daten zu TextView über hinzu. Ich habe ungefähr 30 bis 35 Bilder, die nach einigen Para- oder Datenzeilen hinzugefügt werden, die ich durch NSTextAttachment gemacht habe. Nun, was ich tun möchte, ist, wo immer es mehr als 2 Bilder gibt, die ich in Carousel View haben möchte und die restlichen Daten danach. Schau dir meinen Code an. Ich habe den anderen Weg ausprobiert, aber keinen Erfolg. Jede Hilfe wird sehr geschätzt.Karussellansicht in Textansicht hinzufügen

NSTextAttachment *textAttachment1 = [[NSTextAttachment alloc] init]; 
    textAttachment1.image = [UIImage imageNamed:@"img1.png"]; 
    NSTextAttachment *textAttachment = [[NSTextAttachment alloc] init]; 
    textAttachment.image = [UIImage imageNamed:@"img2.png"]; 
    NSTextAttachment *textAttachment2 = [[NSTextAttachment alloc] init]; 
    textAttachment2.image = [UIImage imageNamed:@"img3.png"]; 
    NSTextAttachment *textAttachment3 = [[NSTextAttachment alloc] init]; 

    CGFloat oldWidth1 = textAttachment1.image.size.width; 
    CGFloat oldWidth = textAttachment.image.size.width; 
    CGFloat oldWidth2 = textAttachment2.image.size.width; 

    CGFloat scaleFactor1 = oldWidth1/(self.textViewResearch.frame.size.width + 70); 
    CGFloat scaleFactor = oldWidth/(self.textViewResearch.frame.size.width + 70); 
    CGFloat scaleFactor2 = oldWidth2/(self.textViewResearch.frame.size.width + 70); 

    textAttachment1.image = [UIImage imageWithCGImage:textAttachment1.image.CGImage scale:scaleFactor1 orientation:UIImageOrientationUp]; 
    textAttachment.image = [UIImage imageWithCGImage:textAttachment.image.CGImage scale:scaleFactor orientation:UIImageOrientationUp]; 
    textAttachment2.image = [UIImage imageWithCGImage:textAttachment2.image.CGImage scale:scaleFactor2 orientation:UIImageOrientationUp]; 

    NSAttributedString *attrStringWithImage1 = [NSAttributedString attributedStringWithAttachment:textAttachment1]; 
    NSAttributedString *attrStringWithImage = [NSAttributedString attributedStringWithAttachment:textAttachment]; 
    NSAttributedString *attrStringWithImage2 = [NSAttributedString attributedStringWithAttachment:textAttachment2]; 

    [attributedString replaceCharactersInRange:NSMakeRange(0, 0) withAttributedString:attrStringWithImage1]; 
    [attributedString replaceCharactersInRange:NSMakeRange(13740, 0) withAttributedString:attrStringWithImage]; 
    [attributedString replaceCharactersInRange:NSMakeRange(13741, 0) withAttributedString:attrStringWithImage2]; 

    self.textView.attributedText = attributedString; 
+0

Wie wäre es stattdessen mit uicollectionview? Legen Sie Ihre ersten zwei Bilder in die erste Zelle, die in einer uicollectionviewcell enthalten sind. Dann lass den Rest als gemeinsame Zellen. Ich frage mich, ob ich Ihre Idee richtig verstehe ... – Calios

+0

nicht möglich @Calios. Die App ist anders, ich kann nicht hinzufügen UICollectionView – iDeveloper

+0

* Ich versuchte den anderen Weg, aber nicht Erfolg. * Was genau wollen falsch? –

Antwort

1

Wenn ich Sie richtig verstanden habe, möchten Sie ein Bild in eine Textansicht einfügen und den Text um es herum fließen lassen. Wenn Sie mehr als 2 Bilder haben, möchten Sie ein Karussell, eine Instanz der Klasse iCarousel.

Eine Unteransicht innerhalb einer Instanz von UITextView zu haben und den Text herumschweben zu lassen, ist eine bekannte Aufgabe. Der einfachste Weg, scheint den Ausschluss Pfad eines Text Container wie folgt zu verwenden zu sein:

// Get the dimension of the subview 
iCarousel *subview = …; 
UIBezierPath *subviewPath = [UIBezierPath bezierPathWithRect:subview.frame]; 

// Somewhere you should add it 
UITextView *textView = …; // Wherever it comes from 
[textView addSubview:subview]; 

// Let the text flow around it 
UITextContainer *textContainer = textView.textContainer; // The text container is the region text is laid out in. 
textContainer.exclusionPaths = [subviewPath]; // Do not lay out in this region. 

Natürlich können Sie die Ausschluss Region ändern müssen, wann immer der Rahmen der Subviews Änderung.

Ein flexiblerer und komplexerer Ansatz besteht darin, das Textlayout selbst zu erstellen. Wenn der obige Ansatz nicht funktioniert, lassen Sie es mich wissen. Ich werde Code dafür hinzufügen.

+0

Vielen Dank für Ihren Beitrag Amin, der obige Code funktioniert nicht und was ich herausgefunden habe ist, dass es nicht möglich ist, Karussellansicht in texview hinzuzufügen. Eine andere von meinem Freund vorgeschlagene Lösung ist die Verwendung eines TableView mit einer benutzerdefinierten Zelle. Mal sehen, wie ich die Lösung implementiere. Sobald ich damit fertig bin, werde ich Sie sicherlich informieren. – iDeveloper

+0

Ich habe nie eine Karussellansicht in eine Textansicht eingefügt. Es ist aber durchaus möglich, in eine Textansicht hineinzuschauen und ich sehe keinen Grund, warum eine Karussellansicht dort nicht funktionieren sollte. –

+0

Hallo Amin vielen Dank für Ihre Hilfe, ich habe es noch nicht implementiert, aber ich habe die Lösung durch tableview gefunden, die ich fand es einfach, noch Ihre Lösung ist eine gültige. Also gehört das Kopfgeld dir. :) – iDeveloper

Verwandte Themen