 		self.initialize()
 	}
 
-	required init(coder aDecoder: NSCoder) {
+	required init!(coder aDecoder: NSCoder) {
 		super.init(coder: aDecoder)
 		self.initialize()
 	}

		self.invalidateIntrinsicContentSize()
		self.collectionView.collectionViewLayout.invalidateLayout()
		self.collectionView.reloadData()
		if self.dataSource != nil && self.dataSource!.numberOfItemsInPickerView(self) > 0 && self.dataSource!.numberOfItemsInPickerView(self) > self.selectedItem {
			self.selectItem(self.selectedItem, animated: false, notifySelection: false)
		}
	}

		return true
	}

	private override func layoutAttributesForItemAtIndexPath(indexPath: NSIndexPath) -> UICollectionViewLayoutAttributes? {
        if let attributes = super.layoutAttributesForItemAtIndexPath(indexPath) {
            switch self.delegate.pickerViewStyleForCollectionViewLayout(self) {
            case .Flat:
                return attributes
            case .Wheel:
                let distance = CGRectGetMidX(attributes.frame) - self.midX;
                let currentAngle = self.maxAngle * distance / self.width / CGFloat(M_PI_2);
                var transform = CATransform3DIdentity;
                transform = CATransform3DTranslate(transform, -distance, 0, -self.width);
                transform = CATransform3DRotate(transform, currentAngle, 0, 1, 0);
                transform = CATransform3DTranslate(transform, 0, 0, self.width);
                attributes.transform3D = transform;
                attributes.alpha = fabs(currentAngle) < self.maxAngle ? 1.0 : 0.0;
                return attributes;
            }
        }
        
        return nil
	}

	private func layoutAttributesForElementsInRect(rect: CGRect) -> [AnyObject]? {
		switch self.delegate.pickerViewStyleForCollectionViewLayout(self) {
		case .Flat:
			return super.layoutAttributesForElementsInRect(rect)
