2012-07-04 4 views
0

У меня проблема с неправильной формой. Я много искал, но ничего не было полезно для меня. У меня есть ряд кадров неправильной формы, и каждый кадр снова делится на подзоны. Я хочу разместить изображения из библиотеки фотографий в каждой области под кадра. Но я не могу получить местоположение каждой подзоны, а так как форма также нерегулярна, и снова возникает другая проблема, чтобы соответствовать изображению в этой области. Может кто-нибудь мне помочь !! Это пример этого кадра. Image Having two odd shape frameКак разместить изображение в кадре неправильной формы

+0

Можете ли вы дать нам небольшую информацию о характере формы и ее генерации, о природе «подзоны» и т. Д.? – Rob

+0

Подумайте, что есть круг, и он разделен на четыре части. Мне нужно добавить изображения в эту область. Граница круга и линии, разделяющая его на части, будет частью кадра, а вся другая часть кадра будет прозрачной, я должен соответствовать представлению изображения на этой части. –

ответ

0

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

Refer this link. It will give you idea how to do that :)

+0

Я думаю, что не понял ваш вопрос: | Можете ли вы объяснить точный сценарий? – DivineDesert

+0

Думайте, что есть круг, и он разделен на четыре части. Мне нужно добавить изображения в эту область. Граница круга и линии, разделяющая его на части, будет частью кадра, а вся другая часть кадра будет прозрачной, я должен соответствовать представлению изображения на этой части. –

0

вы хотите обрезать различные изображения по дуге окружности ли? Например, вот снимок экрана с четырьмя изображениями (просто случайные образы, которые я получил от поиска для собак на http://images.google.com):

uncropped

И здесь же четыре изображения купированы по кругу (или более точно , каждый из четырех изображений, были по отдельности обрезаны по той же окружности пути):

cropped

Вот код, который делает это

- (UIImage *)cropImage:(UIImage *)image locatedAt:(CGRect)imageFrame byCircleAt:(CGPoint)center withRadius:(float)radius 
{ 
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 
    CGContextRef context = CGBitmapContextCreate(NULL, imageFrame.size.width, imageFrame.size.height, 8, 4 * imageFrame.size.width, colorSpace, kCGImageAlphaPremultipliedFirst); 

    CGContextBeginPath(context); 
    CGRect ellipseFrame = CGRectMake(center.x - imageFrame.origin.x - radius, imageFrame.size.height - (center.y - imageFrame.origin.y - radius) - radius * 2.0, radius * 2.0, radius * 2.0); 
    CGContextAddEllipseInRect(context, ellipseFrame); 
    CGContextClosePath(context); 
    CGContextClip(context); 

    CGContextDrawImage(context, CGRectMake(0, 0, imageFrame.size.width, imageFrame.size.height), image.CGImage); 

    CGImageRef imageMasked = CGBitmapContextCreateImage(context); 
    CGContextRelease(context); 
    CGColorSpaceRelease(colorSpace); 

    UIImage *newImage = [UIImage imageWithCGImage:imageMasked]; 

    CGImageRelease(imageMasked); 

    return newImage; 
} 

- (void)addSingleCroppedImage:(UIImage *)image at:(CGRect)imageFrame byCircleAt:(CGPoint)center withRadius:(float)radius 
{ 
    UIImage *newImage = [self cropImage:image locatedAt:imageFrame byCircleAt:center withRadius:radius]; 
    UIImageView *imageView = [[UIImageView alloc] initWithFrame:imageFrame]; 
    imageView.image = newImage; 
    [self.view addSubview:imageView]; 
} 

- (void)addCroppedImages 
{ 
    NSString *bundlePath = [[NSBundle mainBundle] resourcePath]; 

    CGPoint center = CGPointMake(self.view.frame.size.width/2.0, self.view.frame.size.width/2.0); 
    float radius = 150.0; 

    UIImage *dog1 = [UIImage imageWithContentsOfFile:[bundlePath stringByAppendingPathComponent:@"imgres-1.jpg"]]; 
    UIImage *dog2 = [UIImage imageWithContentsOfFile:[bundlePath stringByAppendingPathComponent:@"imgres-2.jpg"]]; 
    UIImage *dog3 = [UIImage imageWithContentsOfFile:[bundlePath stringByAppendingPathComponent:@"imgres-3.jpg"]]; 
    UIImage *dog4 = [UIImage imageWithContentsOfFile:[bundlePath stringByAppendingPathComponent:@"imgres-4.jpg"]]; 

    CGRect frame; 
    UIImage *currentImage; 

    // upper left 

    currentImage = dog1; 
    frame = CGRectMake(center.x - currentImage.size.width, center.y - currentImage.size.height, currentImage.size.width, currentImage.size.height); 
    [self addSingleCroppedImage:currentImage at:frame byCircleAt:center withRadius:radius]; 

    // upper right 

    currentImage = dog2; 
    frame = CGRectMake(center.x, center.y - currentImage.size.height, currentImage.size.width, currentImage.size.height); 
    [self addSingleCroppedImage:currentImage at:frame byCircleAt:center withRadius:radius]; 

    // lower left 

    currentImage = dog3; 
    frame = CGRectMake(center.x - currentImage.size.width, center.y, currentImage.size.width, currentImage.size.height); 
    [self addSingleCroppedImage:currentImage at:frame byCircleAt:center withRadius:radius]; 

    // lower right 

    currentImage = dog4; 
    frame = CGRectMake(center.x, center.y, currentImage.size.width, currentImage.size.height); 
    [self addSingleCroppedImage:currentImage at:frame byCircleAt:center withRadius:radius]; 
} 
+0

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

+0

Итак, у вас есть просто одно изображение, которое вы хотите обрезать кружком? Или у вас есть существующий графический элемент для кругового «фрейма» (это плохое слово, потому что это означает что-то совсем другое в мире UIView!), Что вам нужно поместить ваши изображения? Не уверен, понимаю ли я, что это за «кадр», на который вы ссылаетесь. – Rob

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