আইওএস: বৃত্তাকার কোণগুলির সাথে একটি ইউআইআইমেজ বা ইউআইআইমেজভিউ তৈরি করুন


99

এটা কি সম্ভব একটি তৈরি UIImageঅথবা একটি UIImageViewবৃত্তাকার কোণ সঙ্গে? কারণ আমি একটি নিতে UIImageএবং এটি একটি এর ভিতরে দেখাতে চাই UIImageView, তবে আমি কীভাবে এটি করব তা জানি না।

উত্তর:


238

হ্যা এটা সম্ভব. ( ) শিরোনামটি
আমদানি করুন এবং এর সম্পত্তি নিয়ে খেলুন ।QuartzCore#import <QuartzCore/QuartzCore.h>layerUIImageView

yourImageView.layer.cornerRadius = yourRadius;
yourImageView.clipsToBounds = YES;

দেখুন CALayer আরও তথ্যের জন্য বর্গ রেফারেন্স।


4
ঠিক আছে এটি একটি ইউআইআইমেজভিউয়ের জন্য কাজ করে তবে আমি যদি এই ইউআইআইমেজভিউতে একটি ইউআইআইমেজ রাখি তবে এটি কাজ করে না, আমি কীভাবে সমাধান করব?
সাইক্লিংআইস বেটার

10
সক্রিয় করতে ভুলবেন না clipToBoundsyourImageView.clipsToBounds = YES;
yinkou

4
ইমেজভিউ যদি স্ক্রোলভিউ বা টেবিলভিউ ঘরের ভিতরে থাকে তবে ক্লিপটোবাউন্ডগুলি খারাপ স্ক্রোল কর্মক্ষমতা করে makes
ওজবোজ

আমি এইভাবে পরীক্ষা! প্রচুর স্মৃতি!
লে সাং

আমি এই কোডটি সুইফট ২.০ এ ব্যবহার করেছি এবং এটি সঠিকভাবে কাজ করেছে, আপনাকে ধন্যবাদ। যাইহোক, আমি হ্যাঁ সত্য দ্বারা পরিবর্তন করেছি।
lmiguelvargasf

54

রাউন্ড চিত্র আমদানির জন্য এই কোডটি চেষ্টা করুন কোয়ার্টজকোর ফ্রেমওয়ার্ক রাউন্ড চিত্র তৈরির সহজ উপায়

imageView.layer.backgroundColor=[[UIColor clearColor] CGColor];
imageView.layer.cornerRadius=20;
imageView.layer.borderWidth=2.0;
imageView.layer.masksToBounds = YES;
imageView.layer.borderColor=[[UIColor redColor] CGColor];

এখানে চিত্র বর্ণনা লিখুন


47

উদ্দেশ্য গ

-(UIImage *)makeRoundedImage:(UIImage *) image 
                      radius: (float) radius;
{
  CALayer *imageLayer = [CALayer layer];
  imageLayer.frame = CGRectMake(0, 0, image.size.width, image.size.height);
  imageLayer.contents = (id) image.CGImage;

  imageLayer.masksToBounds = YES;
  imageLayer.cornerRadius = radius;

  UIGraphicsBeginImageContext(image.size);
  [imageLayer renderInContext:UIGraphicsGetCurrentContext()];
  UIImage *roundedImage = UIGraphicsGetImageFromCurrentImageContext();
  UIGraphicsEndImageContext();

  return roundedImage;
}

সুইফট 3

func makeRoundedImage(image: UIImage, radius: Float) -> UIImage {
    var imageLayer = CALayer()
    imageLayer.frame = CGRect(x: 0, y: 0, width: image.size.width, height: image.size.height)
    imageLayer.contents = image.cgImage

    imageLayer.masksToBounds = true
    imageLayer.cornerRadius = radius

    UIGraphicsBeginImageContext(image.size)
    imageLayer.render(in: UIGraphicsGetCurrentContext())
    var roundedImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()

    return roundedImage
}

কীভাবে চিত্র কেন্দ্রের অংশটি বক্ররেখার আকারে স্লিম তৈরি করা যায় কীভাবে এই ধারণাটি সম্ভব তা দয়া করে লোক আমাকে উদ্দেশ্য সি ভাষার জন্য জানতে দিন
রামানি হিতেশ ২

10
uiimageview.layer.cornerRadius = uiimageview.frame.size.height/2;
uiimageview.clipToBounds = YES;

#import <QuartzCore/QuartzCore.h>

4
এটি অন্যান্য উত্তর থেকে কীভাবে আলাদা?
মিমি মিমিএম

4
uiimageview.frame.size.height/2;চিত্রটি নিখুঁত বৃত্তাকার আকার, একটি সম্পূর্ণ বৃত্ত তৈরি করার জন্য @ মার্ক আসল রত্ন।
উত্তর

আপনি কীভাবে uiimageview.frame.size.height / 2 নিয়ে আসবেন? আপনি দয়া করে ব্যাখ্যা করতে পারেন?
ইদ্রিস আশরাফ

@ ইদ্রিসআশরাফ এখানে যুক্ত একটি সাধারণ যুক্তি .... অর্ধেক উচ্চতার ব্যাসার্ধটি শীর্ষ মধ্য থেকে শুরু করে বাম মাঝারি পর্যন্ত শুরু হবে। 45 ডিগ্রি অর্ক তৈরি। সুতরাং 4 পক্ষের এ জাতীয় চাপটি একটি দৃশ্যের নিখুঁত বৃত্ত তৈরি করবে।
উত্তর

4
@ এগুলি যদি আমার প্রস্থ এবং উচ্চতা সহ চিত্র থাকে তবে এটি ব্যর্থ হবে। আপনি এটি চেষ্টা করতে পারেন ..
ইদ্রিস আশরাফ

3
// UIImageView+OSExt.h
#import <UIKit/UIKit.h>

@interface UIImageView (OSExt)
- (void)setBorder:(CGFloat)borderWidth color:(UIColor*)color;
@end

// UIImageView+OSExt.m
#import "UIImageView+OSExt.h"

@implementation UIImageView (OSExt)
- (void)layoutSublayersOfLayer:(CALayer *)layer
{
    for ( CALayer *sub in layer.sublayers )
    {
        if ( YES == [sub.name isEqual:@"border-shape"])
        {
            CGFloat borderHalf = floor([(CAShapeLayer*)sub lineWidth] * .5);
            sub.frame = layer.bounds;
            [sub setBounds:CGRectInset(layer.bounds, borderHalf, borderHalf)];
            [sub setPosition:CGPointMake(CGRectGetMidX(layer.bounds),
                                       CGRectGetMidY(layer.bounds))];
        }
    }
}

- (void)setBorder:(CGFloat)borderWidth color:(UIColor*)color
{
    assert(self.frame.size.width == self.frame.size.height);
    for ( CALayer *sub in [NSArray arrayWithArray:self.layer.sublayers] )
    {
        if ( YES == [sub.name isEqual:@"border-shape"])
        {
            [sub removeFromSuperlayer];
            break;
        }
    }

    CGFloat borderHalf = floor(borderWidth * .5);
    self.layer.cornerRadius = self.layer.bounds.size.width * .5;

    CAShapeLayer *circleLayer = [CAShapeLayer layer];
    self.layer.delegate = (id<CALayerDelegate>)self;
    circleLayer.name = @"border-shape";
    [circleLayer setBounds:CGRectInset(self.bounds, borderHalf, borderHalf)];
    [circleLayer setPosition:CGPointMake(CGRectGetMidX(self.layer.bounds),
                                         CGRectGetMidY(self.layer.bounds))];
    [circleLayer setPath:[[UIBezierPath bezierPathWithOvalInRect:circleLayer.bounds] CGPath]];
    [circleLayer setStrokeColor:color.CGColor];
    [circleLayer setFillColor:[UIColor clearColor].CGColor];
    [circleLayer setLineWidth:borderWidth];

    {
    circleLayer.shadowOffset = CGSizeZero;
    circleLayer.shadowColor = [[UIColor whiteColor] CGColor];
    circleLayer.shadowRadius = borderWidth;
    circleLayer.shadowOpacity = .9f;
    circleLayer.shadowOffset = CGSizeZero;
    }

    // Add the sublayer to the image view's layer tree
    [self.layer addSublayer:circleLayer];

    // old variant
    //CALayer *layer = self.layer;
    //layer.masksToBounds = YES;
    //layer.cornerRadius = self.frame.size.width * 0.5;
    //layer.borderWidth = borderWidth;
    //layer.borderColor = color;
}
@end

এখানে চিত্র বর্ণনা লিখুন


দেখে মনে হচ্ছে সীমান্ত পেরিয়ে ছবিটির কিছুটা রক্তক্ষরণ হয়। আমি নিশ্চিত নই যে এর পক্ষে একটি সহজ ফিক্স আছে কিনা ...
জন গিব

সীমানা উন্নত
রোমান সলডিয়াশকিন

2

সেট করা cornerRadiusএবং clipsToBoundsএটি করার সঠিক উপায়। তবে যদি ভিউটির আকার পরিবর্তন হয় তবে ব্যাসার্ধ আপডেট হবে না। সঠিক আকার পরিবর্তন এবং অ্যানিমেশন আচরণ পেতে, আপনাকে একটি UIImageViewসাবক্লাস তৈরি করতে হবে ।

class RoundImageView: UIImageView {
    override var bounds: CGRect {
        get {
            return super.bounds
        }
        set {
            super.bounds = newValue
            setNeedsLayout()
        }
    }

    override func layoutSubviews() {
        super.layoutSubviews()
        layer.cornerRadius = bounds.width / 2.0
        clipsToBounds = true
    }
}

1

চিত্রটির বৃত্তাকার কোণগুলি পেতে এবং কোণগুলি রঙ করার জন্য এটি চেষ্টা করুন:

imageView.layer.cornerRadius = imageView.frame.size.height/2;
imageView.layer.masksToBounds = YES;
imageView.layer.borderColor = [UIColor colorWithRed:148/255. green:79/255. blue:216/255. alpha:1.0].CGColor;
imageView.layer.borderWidth=2;

শর্ত *: বৃত্তাকার কোণগুলি পেতে ইমেজভিউর উচ্চতা এবং প্রস্থ অবশ্যই একই হতে হবে।



0

এটি সম্ভব তবে আমি আপনাকে পরামর্শ দিচ্ছি যে বৃত্তাকার কোণগুলির সাথে স্বচ্ছ পিএনজি চিত্র (মাস্ক) তৈরি করুন এবং এটি ইউআইআইমেজভিউয়ের সাথে আপনার চিত্রের উপরে রাখুন। এটি দ্রুত সমাধান হতে পারে (উদাহরণস্বরূপ যদি আপনার অ্যানিমেশন বা স্ক্রোলিংয়ের প্রয়োজন হয়)।


0

এটির কেন্দ্রে আমি আমার বৃত্তাকার অবতারটি কীভাবে সেট করি তা এখানে রয়েছে:

-(void)setRoundedAvatar:(UIImageView *)avatarView toDiameter:(float)newSize atView:(UIView *)containedView;
{
    avatarView.layer.cornerRadius = newSize/2;
    avatarView.clipsToBounds = YES;

    avatarView.frame = CGRectMake(0, 0, newSize, newSize);
    CGPoint centerValue = CGPointMake(containView.frame.size.width/2, containedView.frame.size.height/2);
    avatarView.center = centerValue;
}

0

UIBeizerPath # সুইফট -3 && # আইমেজ এক্সটেনশন সহ বৃত্ত

class ViewController: UIViewController {
    @IBOutlet weak var imageOutlet: UIImageView!
    override func viewDidLoad() {
        super.viewDidLoad()
        let image = UIImage(named: "IMG_0001.JPG")
        if let image = image {
            let renderimage = image.imageCroppingBezierPath(path: UIBezierPath(arcCenter: CGPoint(x:image.size.width/2,y:image.size.width/2 )  , radius: 200, startAngle: 0, endAngle:  (2 * CGFloat(M_PI) ), clockwise: true) )
                imageOutlet.image = renderimage
        }
    }
}


extension UIImage {
    func imageCroppingBezierPath(path:UIBezierPath) ->UIImage {

        let frame = CGRect(x: 0, y: 0, width: self.size.width, height: self.size.height)

        //Defining a graphic context  to paint on
        UIGraphicsBeginImageContextWithOptions(self.size, false, 0.0)
        //Get the current graphics context (if it exists)
        let context = UIGraphicsGetCurrentContext()
        //save the current graphic context
        context?.saveGState()
        // clipping area
        path.addClip()
        self.draw(in: frame)

        //To extract an image from our canvas
        let image = UIGraphicsGetImageFromCurrentImageContext()
        //restore graphic context
        context?.restoreGState()
        //remove current context from stack
        UIGraphicsEndImageContext()
        return image!
    }
}

-1
# import QuartzCore framework
imageView.layer.cornerRadius=imgvwUser.frame.size.width/2;
imageView.layer.masksToBounds = YES;

বৃত্তাকার কোণগুলি পেতে ইমেজভিউয়ের উচ্চতা এবং প্রস্থ অবশ্যই একই হতে হবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.