ios 实现照片墙

iOS 的优势在于可以触摸和手势交互,我们会展示一些借助拖曳手势识别器 (pan gesture recognizer) 来进行拖拽的自定义视图 (views)

//自定义一个PhotoImageView

1.定义一个属性

varlastLocation =CGPoint(x:0, y:0)

2.这个变量记录用户触摸点的最后位置。接下来实现init方法。

overrideinit(frame:CGRect) {

super.init(frame: frame)

// 初始化代码

letpanRecognizer =UIPanGestureRecognizer(target:self, action:#selector(MyView.detectPan(_:)))

self.gestureRecognizers = [panRecognizer]

// 视图的颜色随机显示

letblueValue =CGFloat(Int(arc4random() %255)) /255.0

letgreenValue =CGFloat(Int(arc4random() %255)) /255.0

letredValue =CGFloat(Int(arc4random() %255)) /255.0

self.backgroundColor =UIColor(red:redValue, green: greenValue, blue: blueValue, alpha:1.0)

}

requiredinit?(coder aDecoder:NSCoder) {

fatalError("init(coder:) has not been implemented")

}

3.首先给视图添加一个拖曳手势识别器 (pan gesture recognizer),这样就可以点击选中并拖拽视图到新的位置。接下来创建随机颜色,以作为视图的背景色。然后实现detectPan方法,这样在每次识别到手势后,都会调用detectPan方法。

funcdetectPan(_recognizer:UIPanGestureRecognizer){

lettranslation  = recognizer.translation(in:self.superview)

self.center =CGPoint(x: lastLocation.x + translation.x, y: lastLocation.y + translation.y)

}

4.translation变量检测到新的坐标值之后,视图的中心将根据改变后的坐标值做出相应调整。当用户点击视图时,调用touchesBegan:event方法,下面就来实现此方法。

overridefunctouchesBegan(_touches:(Set!), with event:UIEvent!) {

// 把当前被选中的视图放到前面

self.superview?.bringSubview(toFront:self)

// 记住原来的位置

lastLocation =self.center

}

5.选中某个视图后,这个视图会出现在其他视图的前面,其中心位置的坐标值就是lastlocation变量值。现在,自定义的视图差不多完成了,移植到视图控制器 (view controller) 上吧。在ViewController.swift文件中实现viewDidLoad方法


ios 实现照片墙_第1张图片

6.有 25 个 50x50 大小的视图随机地出现在主界面上,运行工程,点击并拖动一个视图,这个视图会一直在其他视图上面。


ios 实现照片墙_第2张图片

你可能感兴趣的:(ios 实现照片墙)