使用Swift 3 in在iOS中制作自己的360˚Product Viewer
要制作360˚产品查看器,您需要从不同角度拍摄一系列产品照片。 我不会完成这些镜头的创建过程,但是,如果您想了解它,可以访问https://www.ecwid.com/blog/guide-to-360-product-photography.html
导入图像
拍摄完这些照片后,将那些照片拖到图像资产中。 不要忘了以递增的数字顺序命名它们。
设置视图
现在我们有了图片,现在让我们切换到情节提要,然后从ViewController中的Object Library中拖动ImageView。 向您的ImageView添加必要的约束。 我希望ImageView是整个宽度的正方形,并位于屏幕中央。 因此,我将在视图中添加“前导”,“尾随”和“垂直居中”约束,并在“ ImageView”中添加“ 1:1纵横比”约束。 您可以按照设计要求设置约束。
还将Pan Gesture Recognizer从对象库拖到ImageView。 要使Pan Gesture正常工作,必须为ImageView启用User Interaction。 要启用它,请转到“属性检查器”,然后在“交互”属性中检查“启用用户交互”属性。
编码!!
现在我们已经为360产品查看器设置了视图,让我们通过创建ImageView的Outlet和Pan Gesture Recognizer的动作开始编码。
@IBOutlet弱var imageView:UIImageView!
@IBAction功能手势(_发送者:UIPanGestureRecognizer){
}
定义一些变量。 currentIndex将保存图像的当前索引, images将保存产品图像数组 将会显示的内容, lastPoint将保存最后一个触摸点的坐标,而灵敏度则定义了查看器的拖动灵敏度。
var currentIndex:Int = 0
var images:[UIImage] = [UIImage]()
var lastPoint:CGPoint = CGPoint.zero
让敏感性:CGFloat = 5.0
现在,让我们在手势动作中编写一个逻辑,该逻辑将在拖动时更改imageView图像。 逻辑很简单。 当用户在imageView上拖动时,我们获得imageView上触摸点的坐标并将其设置为currentPoint 。 然后,我们检查拖动是刚刚开始还是已经开始。 如果拖动刚刚开始,则仅将lastPoint设置为currentPoint 。 否则,我们将获得拖动的速度并将其设置为速度变量,以了解用户是从左向右拖动还是从右向左拖动。 当用户从左向右拖动时,当用户从右向左拖动时,我们得到正速度和负速度 。 我们还要检查currentPoint的x位置是否平滑且不那么敏感。 如果速度为正,并且currentPoint大于lastPoint x位置加灵敏度 ,则将currentIndex递减1到0,当currentIndex达到0时,将其设置回最后一个索引(即images.count -1 )。 通过这样做,我们实现了无限滚动。 类似地,如果速度为负并且currentPoint小于lastPoint x位置减去灵敏度 ,则将currentIndex递增到最后一个索引(即images.count -1 ),当currentIndex到达最后一个索引时,将其设置回0。两种情况下,我们都将lastPoint设置为currentPoint 。
让currentPoint = sender.location(in:imageView)
如果sender.state == .be {
lastPoint = currentPoint
}否则,如果sender.state == .changed {
设速度= sender.velocity(in:imageView)
如果velocity.x> 0 && currentPoint.x> lastPoint.x +灵敏度{
currentIndex = currentIndex> 0吗? currentIndex-1:images.count-1
lastPoint = currentPoint
}其他{
如果currentPoint.x <lastPoint.x-敏感性{
currentIndex = currentIndex <images.count-1吗? currentIndex + 1:0
lastPoint = currentPoint
}
}
}
每次currentIndex更改时,我们需要更新imageView图像。 我想在currentIndex didSet方法中做到这一点。 因此,每当currentIndex值更改时,我们就更新imageView的图像。
var currentIndex:Int = 0 {
didSet {
imageView.image = images [currentIndex]
}
}
初始化
我们快完成了。 现在我们必须通过在图像数组上添加图像并设置初始currentIndex来初始化360产品查看器。 对于本教程,图像源是图像资产,但您也可以从网络获取并将其设置为图像数组。
为我在2 ... 65 {
images.append(UIImage(named:“ \(i)”)!)
}
currentIndex = 0
谢谢!! 😉
希望您喜欢本教程。 如果您有任何疑问,我将很乐意为您提供帮助,如果您有任何反馈,我将不胜感激。 再次感谢您的阅读。 🙂
完整项目:https://github.com/aatish-rajkarnikar/360productview