2014-04-25 11 views
7

Buduję edytor notatek za pomocą zestawu tekstowego w ios7. Wcześniej miałem problem z renderowaniem niestandardowych rozmiarów NSTextAttachment, ponieważ spowalniało to renderowanie. Rozwiązałem problem przez skalowanie obrazów, a następnie dodawanie ich do podglądu tekstu. Możesz znaleźć moją odpowiedź w iOS 7.0 UITextView gettings terribly slow after adding images to it Po skalowaniu obrazów renderowanie w trybie tekstowym działa dobrze bez żadnych opóźnień. Przypisany tekst z widoku tekstowego jest przechowywany w podstawowych danych. Podczas bieżącej sesji aplikacji widok tekstowy prawidłowo wyświetla obrazy. Nawet po zapisaniu przypisanego tekstu w danych podstawowych i ponownym pobraniu go ponownie do wyświetlenia textview, obrazy wyglądają dobrze. Ale po zabiciu aplikacji i ponownym uruchomieniu aplikacji. Obrazy zostają powiększone do 2x rozmiaru. Podczas skalowania obrazów użyłem następującej funkcji i użyłem [Skali [UIScreen], aby utrzymać jakość obrazu.iOS 7 UITextView: Rozmiar nstextattachment przy pobieraniu 2x po ponownym otwarciu aplikacji

- (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; 
} 

Jeśli przeskaluje obrazy do wartości 1.0, obrazy nie powiększają się, ale jakość obrazu jest bardzo zła.

Co myślę, gdzie leży problem? Problem leży w Menedżerze układu.

Co Próbowałem Próbowałem instacji NSLayoutManager i nadpisanie metody - (void) drawGlyphsForGlyphRange: (NSRange) glyphsToShow atPoint: (CGPoint) pochodzenie co widzę jest wielkość przywiązanie podwaja się, gdy uruchamianie nowej sesji aplikacji. Jeśli spróbuję sprawdzić rozmiar załącznika i zmienić jego rozmiar. Opóźnienie zaczyna ponownie nadchodzić. Utknąłem z tym problemem od dłuższego czasu. Wszelkie sugestie będą mile widziane. enter image description here enter image description here

+0

Jak przechowujesz obraz? Czy jest możliwe, że w wyniku skalowania, które wykonujesz, modyfikujesz oryginalny obraz w załączniku i następnym razem zostanie on skalowany ponownie. Co się stanie, gdy uruchomisz aplikację po raz trzeci? Jak aplikacja wie, kiedy nie skalować obrazu? Być może ustawić dodatkowy atrybut w załączniku obrazu, aby aplikacja wiedziała, że ​​nie skaluje obrazu. –

+0

1) Przechowuję kompletny NSAttributedString wewnątrz podstawowych danych. – nick28

+0

2) Tak, to może być powód. Aplikacja zachowuje się tak samo podczas trzeciego biegu lub po 3) Z tego, co otrzymuję, czytając inne pytania, wynika, że ​​domyślny NSTextAttachment przyjmuje rozmiar obrazu jako jego granicę. To właśnie pomogło mi w wykonanie pracy i jej rozwiązanie – nick28

Odpowiedz

4

Czy przyczyną może być wyświetlanie siatkówki? Jeśli jest to siatkówka, przed przechowywaniem konieczne może być zmniejszenie jej rozmiaru o 50%. Jak o próbując w ten sposób: -

//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 

Myślę, że można spróbować.

Powiązane problemy