2014-04-25 6 views
7

Sto costruendo un editor di note utilizzando il kit di testo in ios7. In precedenza ho avuto problemi nel rendering di dimensioni NSTextAttachment in quanto rallentava il rendering in gran parte. Ho risolto il problema ridimensionando le immagini e aggiungendole a textview. Puoi trovare la risposta in iOS 7.0 UITextView gettings terribly slow after adding images to it Dopo il ridimensionamento delle immagini il rendering textview funziona bene senza alcun ritardo. Il testo attribuito di textview è memorizzato nei dati principali. Durante una sessione di applicazione in esecuzione la visualizzazione testo visualizza correttamente le immagini. Anche dopo aver salvato il testo attribuito nei dati di base e recuperato per visualizzarlo di nuovo textview, le immagini sembrano belle. Dopo aver ucciso l'app e aver eseguito nuovamente l'applicazione. Le immagini vengono ingrandite fino a 2x. Per ridimensionare le immagini, ho usato la seguente funzione e utilizzato [scala UIScreen] per mantenere la qualità dell'immagine.iOS 7 UITextView: dimensione del nstextattachment che riceve 2x dopo la riapertura dell'applicazione

- (UIImage *)imageWithImage:(UIImage *)image scaledToSize:(CGSize)newSize { 

    UIGraphicsBeginImageContextWithOptions(newSize, NO, [UIScreen mainScreen].scale); 
    [image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)]; 
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return newImage; 
} 

Se si ridimensionano le immagini a 1.0, le immagini non si espandono ma la qualità dell'immagine è pessima.

Cosa penso Dove si trova il problema? Il problema si trova nel gestore di layout.

quello che ho provato ho cercato sottoclasse della NSLayoutManager e l'override del - (void) drawGlyphsForGlyphRange: (NSRange) glyphsToShow atPoint: (CGPoint) origine Quello che vedo è la dimensione degli allegati raddoppia quando eseguendo una nuova sessione dell'applicazione.Se provo a controllare la dimensione dell'allegato e ridimensionarlo. Il ritardo ricomincia. Sono bloccato da questo problema da un bel po 'di tempo. Ogni suggerimento sarebbe molto apprezzato. enter image description here enter image description here

+0

Come stai memorizzando l'immagine? È possibile che a seguito del ridimensionamento eseguito si modifichi l'immagine originale nell'allegato e la volta successiva venga nuovamente ridimensionata. Cosa succede quando si esegue l'applicazione una terza volta? Come fa l'app a sapere quando non è possibile ridimensionare l'immagine? È possibile impostare alcuni attributi aggiuntivi nell'allegato dell'immagine per consentire all'applicazione di non ridimensionare l'immagine. –

+0

1) Sto memorizzando la NSAttribuitedString completa all'interno dei dati principali. – nick28

+0

2) Sì, questa potrebbe essere la ragione. L'app si comporta allo stesso modo nella terza esecuzione o dopo 3) Da quello che ho letto altre domande è che il NSTextAttachment predefinito prende la dimensione dell'immagine come suo limite. Questo mi ha aiutato in fare un lavoro e risolverlo – nick28

risposta

4

Potrebbe il motivo dovuto alla visualizzazione della retina? Se si tratta di retina, potrebbe essere necessario ridurre le dimensioni del 50% prima di archiviare. Che ne dite di provare questo: -

//Original Size that you want to store 
CGSize imageSize = CGSizeMake(320.0f, 320.0f); 

//Make the image 50% of the size for retina 
if ([[UIScreen mainScreen] respondsToSelector:@selector(displayLinkWithTarget:selector:)] &&([UIScreen mainScreen].scale == 2.0)) { 
    // Retina display 
    imageSize = CGSizeMake(160.0f, 160.0f); 
} 

UIImage * storeImage = [self imageWithImage:self.image scaledToSize:imageSize] 
//TODO: Store this image locally or whatever you want to do. 
2
@interface MMTextAttachment : NSTextAttachment 
{ 
} 
@end 
@implementation MMTextAttachment 
//I want my emoticon has the same size with line's height 
- (CGRect)attachmentBoundsForTextContainer:(NSTextContainer *)textContainer proposedLineFragment:(CGRect)lineFrag glyphPosition:(CGPoint)position characterIndex:(NSUInteger)charIndex NS_AVAILABLE_IOS(7_0) 
{ 
return CGRectMake(0 , 0 , lineFrag.size.height , lineFrag.size.height); 
} 
@end 

penso che si può provare questo.

Problemi correlati