У меня есть изображение руки часов. Я пытаюсь создать повернутые версии этого изображения, чтобы Ic воспроизводил его с использованием анимации (используя метод UIImageView's
animatedImages
).Как нарисовать UIImage с помощью drawAtPoint после перевода графического контекста изображения
В приведенном ниже коде я вижу, что если я применил CGContextTranslateCTM к контексту графической графики, изображение не будет нарисовано, если я не увеличу размер, который я даю UIGraphicsBeginImageContextWithOptions
, чтобы сделать его больше, чем размер изображения.
Зачем это необходимо? Я бы подумал, что весь перевод состоит в том, чтобы переместить определение того, как drawAtPoint:
интерпретирует, где 0,0 есть?
** Edited код показывает более подробную информацию *
-(void) animatedClock
{
UIGraphicsBeginImageContextWithOptions(CGSizeMake(20, 100), NO, 0);
UIBezierPath *clockHand = [[UIBezierPath alloc] init];
[[UIColor yellowColor] setFill];
[clockHand moveToPoint:CGPointMake(0, 20)];
[clockHand addLineToPoint:CGPointMake(10, 0)];
[clockHand addLineToPoint:CGPointMake(20, 20)];
[clockHand fill];
[clockHand removeAllPoints];
[clockHand moveToPoint:CGPointMake(5, 100)];
[clockHand addLineToPoint:CGPointMake(5, 20)];
[clockHand addLineToPoint:CGPointMake(15, 20)];
[clockHand addLineToPoint:CGPointMake(15, 100)];
[clockHand closePath];
[clockHand fill];
UIImage *baseImage = UIGraphicsGetImageFromCurrentImageContext();
NSLog(@"Image size is %@", NSStringFromCGSize(baseImage.size));
UIGraphicsEndImageContext();
//The screenshot will show baseimage, an arrow that is pointed upwards and at the top left of the screen
UIImageView *imageView = [[UIImageView alloc] initWithImage:baseImage];
UIGraphicsEndImageContext();
[self.view addSubview:imageView];
//This code is just to see where 100, 100 is on screen
UIView *redView = [[UIView alloc] initWithFrame:CGRectMake(100,100, 5, 5)];
redView.backgroundColor = [UIColor redColor];
[self.view addSubview:redView];
for (NSUInteger index = 0; index <= 8; index++)
{
//UIGraphicsBeginImageContextWithOptions(baseImage.size, NO, 0); //If I keep this line then nothing is shown
UIGraphicsBeginImageContextWithOptions(CGSizeMake(500, 600), NO, 0); // If I keep this line I can see some of teh rotations
CGContextRef con = UIGraphicsGetCurrentContext();
CGContextTranslateCTM(con, 100, 100); //I want the clock hands to be centered around 100, 100
CGContextRotateCTM(con, 45*index*M_PI/180);
[baseImage drawAtPoint:CGPointMake(0, 0)];
UIImageView *imageView = [[UIImageView alloc] initWithImage:UIGraphicsGetImageFromCurrentImageContext()];
UIGraphicsEndImageContext();
[self.view addSubview:imageView];
imageView.opaque = YES;
imageView.backgroundColor = [UIColor clearColor];
[self.view addSubview:imageView];
}
}
«Я пытаюсь создать повернутые версии этого изображения» Как? В вашем коде нет вращения. – matt
Многое зависит от того, что такое 'baseImage.size'. Что это? – matt
@matt спасибо. BaseImage.size - 20 100. Хотелось запрограммировать простой, поэтому изначально только что показала ту часть, где я переводил начало в 100, 100, чтобы сделать центр часов. Я редактировал свой вопрос, чтобы показать код, который создает базовое изображение. Кроме того, добавлен снимок экрана, который показывает его (это стрелка, указывающая вверх в верхнем левом углу). –