Frage

Ich möchte einige abgerundete Ecken, um alle der UIImageViews in meinem Projekt hinzuzufügen. Ich habe doch schon der Code arbeiten, aber ich bin mit jedem Bild anzuwenden es; sollte ich Unterklasse UIImageView diese hinzufügen? Wenn ja, kann mir jemand einige Hinweise geben, wie dies zu tun?

Hier ist der Code

- (void)viewDidLoad {
    [super viewDidLoad];
    NSString *mainpath = [[NSBundle mainBundle] bundlePath];
    welcomeImageView.image = [UIImage imageWithContentsOfFile:[mainpath stringByAppendingString:@"/test.png"]];
    welcomeImageView.layer.cornerRadius = 9.0;
    welcomeImageView.layer.masksToBounds = YES;
    welcomeImageView.layer.borderColor = [UIColor blackColor].CGColor;
    welcomeImageView.layer.borderWidth = 3.0;
    CGRect frame = welcomeImageView.frame;
    frame.size.width = 100;
    frame.size.height = 100;
    welcomeImageView.frame = frame;
}
War es hilfreich?

Lösung

Sie können eine Kategorie für UIImage verwenden, die eine alternative Möglichkeit ist es, eine Klasse, Unterklasse und manchmal leichter, nur kleine Änderungen.

z.B, ein Verfahren hinzuzufügen, dass ein zurückkehrt UIImage mit der abgerundeten Ecke Attributen.

+(UIImage *)imageWithContentsOfFile:(NSString *)file cornerRadius:(NSInteger)... 
// macdevelopertips:

Weitere Informationen über Objective-c Kategorien können http finden. com / Objective-c / Objective-c-categories.html

Andere Tipps

Überprüfen Sie diese - Abgerundete Ecken auf UIImage

Die Schicht Modifikation scheint der beste Weg zu sein.

UIImageView * roundedView = [[UIImageView alloc] initWithImage: [UIImage imageNamed:@"wood.jpg"]];
// Get the Layer of any view
CALayer * l = [roundedView layer];
[l setMasksToBounds:YES];
[l setCornerRadius:10.0];

Anstatt Subklassifizieren, können Sie mehr leistungsstarke Funktionen durch einfache Kategorien auf UIImageView und CALayer erreichen.

Erstellen Sie eine Kategorie auf UIImageView wie folgt aus:

- (void)maskRoundCorners:(UIRectCorner)corners radius:(CGFloat)radius {
    // To round all corners, we can just set the radius on the layer
    if ( corners == UIRectCornerAllCorners ) {
        self.layer.cornerRadius = radius;
        self.layer.masksToBounds = YES;
    } else {
        // If we want to choose which corners we want to mask then
        // it is necessary to create a mask layer.
        self.layer.mask = [CALayer maskLayerWithCorners:corners radii:CGSizeMake(radius, radius) frame:self.bounds];
    }
}

Dies erfordert eine Kategorie-Methode auf CALayer:

+ (id)maskLayerWithCorners:(UIRectCorner)corners radii:(CGSize)radii frame:(CGRect)frame {

    // Create a CAShapeLayer
    CAShapeLayer *mask = [CAShapeLayer layer];

    // Set the frame
    mask.frame = frame;

    // Set the CGPath from a UIBezierPath
    mask.path = [UIBezierPath bezierPathWithRoundedRect:mask.bounds byRoundingCorners:corners cornerRadii:radii].CGPath;

    // Set the fill color
    mask.fillColor = [UIColor whiteColor].CGColor;

    return mask;
}

Also, das können Sie eine beliebige Kombination abzurunden (siehe UIRectCorner) von Ecken, was besonders praktisch ist, wenn Sie ein Bild in einer Gruppe Stil UITableView setzen wollen. Es gibt eine Einschränkung, wenn dies aber tun. Weil wir nicht subclassed UIImageView haben, können wir keinen Code in layoutSubviews injizieren, was bedeutet, dass die Maskenschicht nicht richtig sein kann. In der Tat, wenn die Zellen der Konfiguration werden nicht einmal die Grenzen der Bildansicht eingestellt werden, wenn Sie die Kategorie-Methode aufrufen. Daher müssen Sie die Grenzen der Bildansicht, um sicherzustellen, wird vor dem abgerundeten Ecken Zugabe (außer bei Verwendung von UIRectCornersAllCorners).

Hier ist ein Code, der tut dies:

        // Perform corner rounding
        UIRectCorner corners = !UIRectCornerAllCorners;
        if (indexPath.row == 0) 
            corners = UIRectCornerTopLeft;
        if (indexPath.row == numberOfRowsInTheTable)  
            corners |= UIRectCornerBottomLeft;

        if (corners > 0) {
            cell.imageView.bounds = CGRectMake(0.f, 0.f, [self.tableView rowHeight], [self.tableView rowHeight]);
            [cell.imageView maskRoundCorners:corners radius:10.f];
        } else {
            [cell.imageView removeRoundCornersMask];
        }

Ich habe eine andere Kategorie, die abgerundeten Ecken entfernt -. Alles, was tut, ist keine Masken entfernen und die cornerRadius auf 0 gesetzt

Ja, Sie sollten UIImageView Unterklasse, und verwenden Sie Ihre benutzerdefinierte Unterklasse in Ihrem Projekt.

Sie können UIImageView Unterklasse und dann, wenn Sie implementieren seine setNeedsDisplay Methode die runden Ecken auf Unterklassen arbeiten. (Vergessen Sie nicht, Quartz zu importieren)

-(void)setNeedsDisplay {
    self.layer.cornerRadius = 5;
    self.layer.masksToBounds = YES;
    [self.layer setBorderColor:[[UIColor whiteColor] CGColor]];
    [self.layer setBorderWidth: 2.0];
}

Versuchen Sie dies,

coverImage.image = [UIImage imageWithContentsOfFile:@"coverImage.png"]; 
coverImage.layer.masksToBounds = YES;
coverImage.layer.cornerRadius = 10.0;
coverImage.layer.borderWidth = 1.0;
coverImage.layer.borderColor = [[UIColor brown] CGColor];

Dies kann Ihnen helfen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top