آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

قرار دادن رنگ گرادیان برای ImageView

Mhd3  8 سال پیش  8 سال پیش
0 0

سلام.. وقت بخیر

من میخوام یک پس زمینه گرادیان برای ImageView قرار بدم.. بطوری که رنگ پس زمینه گرادیان باشه و عکس هم نشون داده بشه.. کدهایی که تو اینترنت دیدم مثل این گرادیان رو روی عکس قرار میده به طوری که دیگه عکس پیدا نیست..کسی راهی داره؟؟

 class ImageViewWithGradient: UIImageView
{
let myGradientLayer: CAGradientLayer

override init(frame: CGRect)
{
myGradientLayer = CAGradientLayer()
super.init(frame: frame)
self.setup()
}

required init(coder aDecoder: NSCoder)
{
myGradientLayer = CAGradientLayer()
super.init(coder: aDecoder)!
self.setup()
}

func setup()
{
myGradientLayer.startPoint = CGPoint(x: 0, y: 0)
myGradientLayer.endPoint = CGPoint(x: 1, y: 1)
let colors: [CGColorRef] = [
UIColor.clearColor().CGColor,
UIColor(red: 1, green: 0, blue: 0, alpha: 0.3).CGColor,
UIColor(red: 1, green: 0, blue: 1, alpha: 0.5).CGColor,
UIColor(red: 0, green: 0, blue: 1, alpha: 0.3).CGColor,
UIColor.clearColor().CGColor ]
myGradientLayer.colors = colors
myGradientLayer.opaque = false
myGradientLayer.locations = [0.0, 0.3, 0.5, 0.7, 1.0]

self.layer.addSublayer(myGradientLayer)
}

override func layoutSubviews()
{
myGradientLayer.frame = self.layer.bounds
}
}
0 0
کسی نیست ؟؟؟؟؟؟؟ (8 سال پیش)
0 0
چرا کسی پاسخگو نیست؟ (8 سال پیش)
+2 0
به این علت که متد Setup بعد از init صدا زده شده . (8 سال پیش)
0 0
جا به جا میکنم دستورات رو به خطا بر میخورم... Use of 'self' in method call 'setup' before super.init initializes self (8 سال پیش)
 برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال 
کاشی زاده  8 سال پیش
+1 0

کد هاتون رو به شکل زیر تغییر بدید و به جای ایجاد یک ImageView یک View سفارشی بسازید :

 @IBDesignable class CustomImageView: UIView {
    let myGradientLayer: CAGradientLayer!
    let imageView: UIImageView = UIImageView()
    
    @IBInspectable  var image: UIImage! {
        didSet {
            imageView.image = image
        }
    }
    
    public override init(frame: CGRect) {
        myGradientLayer = CAGradientLayer()
        super.init(frame: frame)
        
    }
    
    required init?(coder aDecoder: NSCoder) {
        myGradientLayer = CAGradientLayer()
        super.init(coder: aDecoder)
        initializer()
    }
    
    func initializer() {
        myGradientLayer.startPoint = CGPoint(x: 0, y: 0)
        myGradientLayer.endPoint = CGPoint(x: 1, y: 1)
        let colors: [CGColor] = [
            UIColor.clear.cgColor,
            UIColor(red: 1, green: 0, blue: 0, alpha: 0.8).cgColor,
            UIColor(red: 1, green: 0, blue: 1, alpha: 0.8).cgColor,
            UIColor(red: 0, green: 0, blue: 1, alpha: 0.8).cgColor,
            UIColor.clear.cgColor ]
        myGradientLayer.colors = colors
        myGradientLayer.isOpaque = false
        myGradientLayer.locations = [0.0, 0.3, 0.5, 0.7, 1.0]
        
        self.layer.addSublayer(myGradientLayer)
        self.addSubview(imageView)
        
    }
    
    override func layoutSubviews(){
        myGradientLayer.frame = self.layer.bounds
        imageView.frame = self.layer.bounds
    }
}
0 0
ممنون.. این جواب میده ولی واسه اینکه اندازه عکس اندازه مشخص شده باشه کدهای زیر رو اضافه کردم ولی جواب نمیده : let imageView: UIImageView = UIImageView(frame: CGRectMake(0, 0, 80, 48)) @IBInspectable var image: UIImage! { didSet { imageView.contentMode = UIViewContentMode.ScaleAspectFit imageView.image = image } } (8 سال پیش)
+1 0
سعی کنید کد هاتون رو داخل پاسخ قرار بدید که بهتر خونده بشه. الان کدی که در بالا قرار گرفته اگر دقت کنید اندازه عکس نسبت به اندازه View در نظر گرفته میشه پس به جای تغییر سایز عکس View را تغییر سایز دهید. (8 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .