views:

118

answers:

2

EVERYTHING WRITTEN HERE ACTUALLY WORKS RIGHT

EXEPT FOR [UIImage imageNamed:] METHOD USAGE


Implementation

I am using model in witch you have a custom UITableViewCell with one custom UIView set up as Cell's backgroundView.

Custom UIView contains two Cell-sized images (320x80 px), one of which is 100% transparent to half of the view. All elements are set to be Opaque and have 1.0 Alpha property.

I don't reuse Cells because I failed to make them loading different images. Cell's reused one-by-one up to 9 cells overall. So I have 9 reusable Cells in memory.

Cell initWithStyle:reuseIdentifier method part:

    CGRect viewFrame = CGRectMake(0.0f, 0.0f, 320.0f, 80.0f);
    customCellView = [[CustomCellView alloc] initWithFrame:viewFrame];
    customCellView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
    [self setBackgroundView:customCellView];

CustomCellView's initialization method:

- (id)initWithFrame:(CGRect)frame {
    if ((self = [super initWithFrame:frame])) {
        self.opaque = YES;
        self.backgroundColor = [UIColor UICustomColor];
    }
    return self;
}

Images are being pre-loaded to NSMutableArray as UIImage objects from PNG files with UIImage's imageNamed: method.

They are being set in UITableViewDelegate's method tableView:cellForRowAtIndexPath: and passed through UITableViewCell with custom method to UIView.

And then drawn in UIView's drawRect: overridden method:

- (void)drawRect:(CGRect)rect {
    CGRect contentRect = self.bounds; 
    if (!self.editing) {
        CGFloat boundsX = contentRect.origin.x;
        CGFloat boundsY = contentRect.origin.y;
        CGPoint point;
        point = CGPointMake(boundsX, boundsY);
        if (firstImage)  { [firstImage  drawInRect:contentRect blendMode:kCGBlendModeNormal alpha:1.0f]; }
        if (secondImage) { [secondImage drawInRect:contentRect blendMode:kCGBlendModeNormal alpha:1.0f]; }
    }
}

As you see images are being drawn with drawInRect:blendMode:alpha: method.

Problem

Well, UITableView can't be scrolled at all, it's being struck on every cell, it's chunky and creepy.

Thoughts

Well digging sample code, stackoverflow and forums gave me thought to use OpenGL ES to pre-render images, but, really, is it that hard to make a smooth scrolling?

A: 

What's wrong with just using UIImageViews? Are they not fast enough? (They should be if you're preloading the UIImages).

One thing to note is that [UIImage imageNamed:] won't explicitly load the image data into memory. It'll give you a reference which is backed by the data on disk. You can get around this by making a call to [yourImage CGImage].

David Liu
A: 

Actually, everything written above is right. Because after my hands were down and I written post here, I builded it again. And it works pretty well. Anyway thanks for some thoughts. Sorry for bothering guys. =)

Marking Liu's answer right cause he's pointed me to the imageNamed: REAL work.

ermik