Your code is only installing an image into the image view if view == nil. If you get passed a recycled view then you leave the image alone. That means your tile with still have the last image that was used, which will very likely be the wrong image.
This is the same issue that you will face with table views, UICollectionViews, or just about any API the uses cell recycling like this.
You need to move the code that installs an image into your image view outside of the if (view == nil) ... else
block and down with the code that sets the label text.