Kishore Kumar
Kishore Kumar

Reputation: 4375

how to set frame dynamically in swift?

i am trying to set imageview as subview for scrollview.for that i am setting different frame depends upon the screensize.

This is my code

 let screensize:CGRect=UIScreen.mainScreen().bounds
        let screenwidth=screensize.width
        var frames:CGRect
        for var index=0 ;index < arrBirds.count ;index++
            {
                if(screenwidth==320)
                {
                    frames.origin.x = CGFloat(index) * (self.view.frame.size.width);
                    frames.origin.y = 0;

                    frames.size=scrollview.frame.size;

                }
                else if(screenwidth==375)
                {
                    frames.origin.x = CGFloat(index) * (self.view.frame.size.width);
                    frames.origin.y=0;
                    frames.size=scrollview.frame.size;
                }
                else
                {
                    frames.origin.x = CGFloat(index) * (self.view.frame.size.width);
                    frames.origin.y=0;
                    frames.size=scrollview.frame.size;
                }

                imageView=UIImageView(frame:frames)
                imageView.image=UIImage(named: arrBirds[index] as! String)
                scrollview .addSubview(imageView)

But i am getting error this line

  frames.origin.x = CGFloat(index) * (self.view.frame.size.width);//struct frame must be completely initialised  before a member is stored to.

Upvotes: 2

Views: 2445

Answers (2)

luk2302
luk2302

Reputation: 57214

You have not yet created an instance of the struct CGRect yet. Before accessing / setting any members on it you you need to create a instance first and only after that set the different members of it:

Change the line var frames:CGRect to:

var frames = CGRectZero

Upvotes: 1

Micha&#235;l Azevedo
Micha&#235;l Azevedo

Reputation: 3896

According to Apple Docs :

Classes and structures must set all of their stored properties to an appropriate initial value by the time an instance of that class or structure is created.

Your frames object isn't initialized, instead you should write :

var frames = CGRectZero

Upvotes: 1

Related Questions