Hi,

I have an iOS-based flat-file database app that shows records in a 
UIViewController, called RecordViewController.

I’ve added an “Insert Photo” menu item to the editing menu. This brings up a 
photo picker view that sends the selected image back to RecordViewController.

I’ve included code to scale the image to fit the screen width, which seems to 
work fine when it first displays. However, if I save the datafile or just 
display a different record, then return to the record with the embedded image, 
the image is no longer scaled, but has reverted to its original size.

I haven’t done much with images (and Quartz is just another mineral to me), so 
I don't know what else I might need to do to keep the scaling from reverting.

Here’s the RecordViewController routine that is called to embed the image in 
the UITextView.

- (void)insertPhoto:(UIImage *)image
{
        // determine the scaling factor to fit the screen width
        CGFloat oldWidth = image.size.width;
        NSUInteger newWidth = (g_textView.frame.size.width - 10);
        CGFloat scaleFactor;

        if (oldWidth > newWidth)
                scaleFactor = oldWidth / newWidth;
        else
                scaleFactor = 1;
        
        // create scaled version of image
        CGImageRef imageRef = image.CGImage;
        UIImage *scaledImage = [UIImage imageWithCGImage:imageRef 
scale:scaleFactor orientation:UIImageOrientationUp];

        // create a text attachment containing the scaled image
        NSTextAttachment *textAttachment = [[NSTextAttachment alloc] init];
        textAttachment.image = scaledImage;
        
        // create an attributed string containing the text attachment
        NSAttributedString *attrStringWithImage = [NSAttributedString 
attributedStringWithAttachment:textAttachment];
        
        // create a mutable attributed string, tempMutableAttributedText, from 
the text view's .attributedText
        NSMutableAttributedString *tempMutableAttributedText = 
[[NSMutableAttributedString alloc] 
initWithAttributedString:g_textView.attributedText];
        
        // insert the attributed string containing the image at the selection 
point in tempMutableAttributedText
        NSRange insertionRange = g_textView.selectedRange;
        [tempMutableAttributedText replaceCharactersInRange:insertionRange 
withAttributedString:attrStringWithImage];
        
        // set the text view's .attributedText to tempMutableAttributedText
        [g_textView setAttributedText:tempMutableAttributedText];
        
        [[self currentRecord] setIsDirty:YES];
        [self setDatafileDirty:YES];
}

So, what am I missing? 

And, since different devices need different scaling, is there a way to scale 
multiple embedded images on the fly? If not, I may add code to the photo picker 
to let the user specify the scaling factor. 

Thanks,
Mike Wright

_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to