2013-11-28 33 views
7

Teraz opracowuję projekt, w którym muszę pokazać obrazek z kształtem jak poniżej.Zmiana domyślnego kształtu prostokąta kształtu UII

enter image description here

Jak mogę to zrobić? Nie mam pojęcia, jak to zrobić. Proszę każdy pomysł do rozwiązania.

+0

Czy jest to statyczny obraz lub rodzaj kontroli i trzeba przetwarzać zdarzenia dotykowe, gdy użytkownik dotknie obrazu? Czy tworzysz obraz w edytorze obrazów, czy chcesz programowo utworzyć obraz? – yurish

+0

@yurish: obraz statyczny .. Obraz użytkownika pobrany z Internetu. Następnie pokaż zdjęcie w powyższym kroku. – Seeker

+0

Zaakceptowałem poniższą odpowiedź, ale nie podam dokładnego kształtu, o którym wspomniałem powyżej ... – Seeker

Odpowiedz

1

Oto w jaki sposób można stworzyć ścieżkę do maskowania:

- (UIBezierPath *)curvedRectWithFrame:(CGRect)frame radius:(CGFloat)radius 
{ 
    double halfFrameHeight = ((double)frame.size.height/2); 

    // Check if the radius is too small. 
    if (radius < halfFrameHeight) { 
     radius = halfFrameHeight; 
    } 

    CGFloat arcAngle = asin(halfFrameHeight/radius); 
    CGFloat centerX = frame.origin.x + (frame.size.width - radius); 
    CGFloat centerY = frame.origin.y + halfFrameHeight; 

    UIBezierPath *path = [UIBezierPath bezierPath]; 

    [path moveToPoint:frame.origin]; 
    [path addLineToPoint:CGPointMake(centerX + radius * cos(arcAngle), frame.origin.y)]; 
    [path addArcWithCenter:CGPointMake(centerX, centerY) radius:radius startAngle:-arcAngle endAngle:arcAngle clockwise:YES]; 
    [path addLineToPoint:CGPointMake(frame.origin.x, path.currentPoint.y)]; 
    [path closePath]; 

    return path; 
} 

Następnie można zastosować maskę kształt do obrazu:

const CGFloat kCurveRadius = 500.; 

CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init]; 
maskLayer.frame = yourImageView.bounds; 
maskLayer.path = [self curvedRectWithFrame:maskLayer.bounds radius:kCurveRadius].CGPath; 

yourImageView.layer.mask = maskLayer; 
9

Może być to kod pomoże ...

UIBezierPath *maskPath; 
maskPath = [UIBezierPath bezierPathWithRoundedRect:YourImageVIew.bounds byRoundingCorners:(UIRectCornerTopRight | UIRectCornerBottomRight) cornerRadii:CGSizeMake(50.0, 50.0)]; 

CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init]; 
maskLayer.frame = YourImageVIew.bounds; 
maskLayer.path = maskPath.CGPath; 
YourImageVIew.layer.mask = maskLayer; 
+0

: czy możesz powiedzieć coś o imgtest? – Seeker

+0

Nie wiem, który obiekt jest ... – Seeker

+0

oh przepraszam, że to jest twój oryginalny obraz –

Powiązane problemy