Установка размеров UIImage на изображении UITableViewCell

Родительский метод __construct(), определенный в классе b, будет запускаться автоматически, если вы создадите экземпляр дочернего класса a, , если только не существует метод __construct(), определенный в классе a.

class a extends b { 
} 

class b { 
   public function __construct() 
   { 
      echo 'In B Constructor'; 
   } 
} 

$x = new a();

Если метод __construct() определен в классе a, то это отменяет использование метода __construct() в классе b .... он будет запускать вместо класса b __construct() method

class a extends b { 
   public function __construct() 
   { 
      echo 'In A Constructor'; 
   } 
} 

class b { 
   public function __construct() 
   { 
      echo 'In B Constructor'; 
   } 
} 

$x = new a();

Итак, если в вашем дочернем классе определен метод __construct(), то вам нужно явно вызвать конструктор для родителя, если вы хотите выполнить его также.

class a extends b { 
   public function __construct() 
   { 
      parent::__construct();
      echo 'In A Constructor'; 
   } 
} 

class b { 
   public function __construct() 
   { 
      echo 'In B Constructor'; 
   } 
} 

$x = new a();
7
задан Peter Hosey 21 March 2010 в 07:19
поделиться

4 ответа

​​

Вот что пользователь «bcd» на официальных форумах опубликовал , что в конечном итоге решило проблему (с небольшой модификацией, сделанной мной, чтобы сделать ее статичной для включения в набор служебных методов):

+ (UIImage *)scale:(UIImage *)image toSize:(CGSize)size
{
    UIGraphicsBeginImageContext(size);
    [image drawInRect:CGRectMake(0, 0, size.width, size.height)];
    UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return scaledImage;
}
23
ответ дан 6 December 2019 в 06:15
поделиться

Я делаю нечто подобное в своем приложении.

    UIImage* resizedImage(UIImage *inImage, CGRect thumbRect)
{
    CGImageRef          imageRef = [inImage CGImage];
    CGImageAlphaInfo    alphaInfo = CGImageGetAlphaInfo(imageRef);

    if (alphaInfo == kCGImageAlphaNone)
        alphaInfo = kCGImageAlphaNoneSkipLast;

    CGContextRef bitmap = CGBitmapContextCreate (NULL, thumbRect.size.width, thumbRect.size.height, 8, thumbRect.size.width*3, 
                                                                                 CGColorSpaceCreateDeviceRGB(), alphaInfo);

    CGContextDrawImage(bitmap, thumbRect, imageRef);

    CGImageRef  ref = CGBitmapContextCreateImage(bitmap);
    UIImage*    result = [UIImage imageWithCGImage:ref];

    CGContextRelease(bitmap);
    CGImageRelease(ref);

    return result;
}

Затем создайте новое изображение, ограничивая пропорции. Заменив "изображение" файлом ICO, полученным от Amazon.

CGRect sz = CGRectMake(0.0f, 0.0f, 16, 16);
UIImage *resized = resizedImage(image, sz);
4
ответ дан 6 December 2019 в 06:15
поделиться

Я ничего не знаю о том, как работают файлы ico, поэтому, возможно, можно легко извлечь изображение 16x16 и использовать его, но я понятия не имею, как.

Насколько я понимаю, Я знаю, что невозможно установить какие-либо полезные свойства изображения в универсальном UITableViewCell . Самый простой способ (все еще беспорядочный, особенно если вы новичок) уменьшить все до 16x16 - это создать подкласс UITableViewCell , дать ему UIImageView , всегда изменять размер изображения равным 16x16, и установите его contentMode равным UIViewContentModeAspectFit .

0
ответ дан 6 December 2019 в 06:15
поделиться

У меня еще недостаточно кармы, чтобы комментировать ответы, но у меня все получилось. с кодом bbrandons выше.

Я получил на консоли изрядное количество предупреждений о том, что установка байтов на строку недостаточно высока - после прочтения ответов на это сообщение я установил для него значение 0, что позволяет системе определять правильное значение.

например:

CGContextRef bitmap = CGBitmapContextCreate(NULL, size.width, size.height, 8, 0, CGColorSpaceCreateDeviceRGB(), alphaInfo);
1
ответ дан 6 December 2019 в 06:15
поделиться