2014-02-21 5 views
0

Я пытаюсь экспортировать tableview как изображение. Я бы хотел контролировать размер этого изображения.Scaled UIImageView от UITableView

Проблема заключается в том, что изображение равно как большой как рама стола, на iPhone в моем случае 320x480 (или другая высота). Я хочу, чтобы он был больше. На самом деле я хочу иметь управление над размером экспортируемого изображения. Например, я не хочу экспортировать изображение 320x480. Мне нужен какой-то масштабный коэффициент. Например, я хотел бы иметь 2 раза больше изображения с 2-кратным количеством пикселей ... Надеюсь, я объяснил это хорошо. Вот код, который я использую для создания изображения.

- (UIImageView*)renderTableViewAsImageView { 

    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0]; 
    [self.tableView cellForRowAtIndexPath:indexPath].hidden = YES; 
    self.invoiceExportTitle.textColor = [UIColor blackColor]; 

    CGFloat scaleFactor = 1.0; 
    CGSize pageSize = CGSizeMake(self.tableView.contentSize.width*scaleFactor, self.tableView.contentSize.height*scaleFactor); 

    UIGraphicsBeginImageContext(pageSize); 

    [self.tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:NO]; 
    [self.tableView.layer renderInContext:UIGraphicsGetCurrentContext()]; 

    NSInteger rows = [self.tableView numberOfRowsInSection:0]; 
    NSInteger numberOfRowsInView = 4; 
    for (int i=0; i<rows/numberOfRowsInView; i++) { 
     [self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:(i+1)*numberOfRowsInView inSection:0] 
           atScrollPosition:UITableViewScrollPositionTop 
             animated:NO]; 
     [self.tableView.layer renderInContext:UIGraphicsGetCurrentContext()]; 
    } 

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIImageView *imageView = [[UIImageView alloc] initWithImage:image]; 

    UIGraphicsEndImageContext(); 

    [self.tableView cellForRowAtIndexPath:indexPath].hidden = NO; 
    self.invoiceExportTitle.textColor = [UIColor clearColor]; 
    [self.tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:NO]; 

    return imageView; 
} 
+0

Будет ли это работать только для изменения размера UIImage ?, например: http://stackoverflow.com/questions/2658738/the-simplest-way-to-resize-an-uiimage –

ответ

0

Когда у вас есть UIImage, вы можете сделать это в масштабном варианте с

[image drawInRect:CGRectMake(0,0,width, height)];

в графическом контексте. Конечно, пиксели будут интерполированы, но базовое изображение будет всего 320x480, поэтому качество останется таким.

+0

На самом деле мне нужно больше качества на базовом изображении , Я не хочу изменять размер сгенерированного изображения, но я хочу изначально генерировать большее изображение. – stellz

+0

Это невозможно - то, что вы делаете, это рисовать содержимое экрана на изображение, и это может иметь только разрешение экрана. Если вы хотите иметь более высокое качество, вы должны сами определить все рисованные объекты в виде векторного массива и нарисовать эти объекты в изображении. – TheEye

+0

Хмм, я вижу, 10 раз для объяснения – stellz

Смежные вопросы