我是ios编程的新学习者.我试图在stackoverflow上搜索另一个例子和更多问题,但这不是我的目标.我想在UIPageControl的索引0处设置一个点的图像,类似于iPhone搜索主屏幕.有办法吗?请用一些代码或其他有用的链接向我解释.
提前致谢
Sah*_*jan 34
我找到了解决这个问题的方法.我知道这不是方法,但它会一直有效,直到iOS 8将在市场上推出.
崩溃原因:
在iOS 7 [self.subViews objectAtIndex:i]返回UIView而不是UIImageView和setImage不是UIView的属性,应用程序崩溃.我使用以下代码解决了我的问题.
检查子视图是UIView(适用于iOS7)还是UIImageView(适用于iOS6或更早版本).如果它是UIView我将在该视图上添加UIImageView作为子视图并且瞧它工作而不是崩溃.. !!
-(void) updateDots
{
for (int i = 0; i < [self.subviews count]; i++)
{
UIImageView * dot = [self imageViewForSubview: [self.subviews objectAtIndex: i]];
if (i == self.currentPage) dot.image = activeImage;
else dot.image = inactiveImage;
}
}
- (UIImageView *) imageViewForSubview: (UIView *) view
{
UIImageView * dot = nil;
if ([view isKindOfClass: [UIView class]])
{
for (UIView* subview in view.subviews)
{
if ([subview isKindOfClass:[UIImageView class]])
{
dot = (UIImageView *)subview;
break;
}
}
if (dot == nil)
{
dot = [[UIImageView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, view.frame.size.width, view.frame.size.height)];
[view addSubview:dot];
}
}
else
{
dot = (UIImageView *) view;
}
return dot;
}
Run Code Online (Sandbox Code Playgroud)
此外,要清除已存在的图像,请将现有指示器的色调颜色设置为透明:
- (void)awakeFromNib
{
self.pageIndicatorTintColor = [UIColor clearColor];
self.currentPageIndicatorTintColor = [UIColor clearColor];
}
Run Code Online (Sandbox Code Playgroud)
希望这能解决iOS 7的问题.
快乐的编码
Gyp*_*psa 13
试试这个链接: -
使用GrayPageControl回答: - 有没有办法改变页面指示器点的颜色
这真的很好,也很可靠.我也使用过这段代码.
您可能需要进行更多自定义
-(void) updateDots
{
for (int i = 0; i < [self.subviews count]; i++)
{
UIImageView* dot = [self.subviews objectAtIndex:i];
if (i == self.currentPage) {
if(i==0) {
dot.image = [UIImage imageNamed:@"activesearch.png"];
} else {
dot.image = activeImage;
}
} else {
if(i==0) {
dot.image = [UIImage imageNamed:@"inactivesearch.png"];
} else {
dot.image = inactiveImage;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 10
只需使用图案图像更改UIPageControl页面指示器颜色 self.pageControl.currentPageIndicatorTintColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"circle"]];
对于夫特3代码的最佳编译到替换第一图标的UIPageControl
通过位置标记:
import UIKit
class LocationPageControl: UIPageControl {
let locationArrow: UIImage = UIImage(named: "locationArrow")!
let pageCircle: UIImage = UIImage(named: "pageCircle")!
override var numberOfPages: Int {
didSet {
updateDots()
}
}
override var currentPage: Int {
didSet {
updateDots()
}
}
override func awakeFromNib() {
super.awakeFromNib()
self.pageIndicatorTintColor = UIColor.clear
self.currentPageIndicatorTintColor = UIColor.clear
self.clipsToBounds = false
}
func updateDots() {
var i = 0
for view in self.subviews {
var imageView = self.imageView(forSubview: view)
if imageView == nil {
if i == 0 {
imageView = UIImageView(image: locationArrow)
} else {
imageView = UIImageView(image: pageCircle)
}
imageView!.center = view.center
view.addSubview(imageView!)
view.clipsToBounds = false
}
if i == self.currentPage {
imageView!.alpha = 1.0
} else {
imageView!.alpha = 0.5
}
i += 1
}
}
fileprivate func imageView(forSubview view: UIView) -> UIImageView? {
var dot: UIImageView?
if let dotImageView = view as? UIImageView {
dot = dotImageView
} else {
for foundView in view.subviews {
if let imageView = foundView as? UIImageView {
dot = imageView
break
}
}
}
return dot
}
}
Run Code Online (Sandbox Code Playgroud)
附图:
我创建了一个自定义页面控制器,它应该以几乎相同的方式运行,而无需侵入 UIPageControl 的内部结构或为一个小部件拥有一个完整的库。
只需在您的故事板中放置一个空的 UIStackView 并将其自定义类设置为下面的这个类,并像普通的 UIPageControl 一样使用numberOfPages
和使用currentPage
。在 UIStackView 上设置间距以更改视图之间有多少空间。
斯威夫特 4.2
/**
If adding via storyboard, you should not need to set a width and height constraint for this view,
just set a placeholder for each so autolayout doesnt complain and this view will size itself once its populated with pages at runtime
*/
class PageControl: UIStackView {
@IBInspectable var currentPageImage: UIImage = UIImage(named: "whiteCircleFilled")!
@IBInspectable var pageImage: UIImage = UIImage(named: "whiteCircleOutlined")!
/**
Sets how many page indicators will show
*/
var numberOfPages = 3 {
didSet {
layoutIndicators()
}
}
/**
Sets which page indicator will be highlighted with the **currentPageImage**
*/
var currentPage = 0 {
didSet {
setCurrentPageIndicator()
}
}
override func awakeFromNib() {
super.awakeFromNib()
axis = .horizontal
distribution = .equalSpacing
alignment = .center
layoutIndicators()
}
private func layoutIndicators() {
for i in 0..<numberOfPages {
let imageView: UIImageView
if i < arrangedSubviews.count {
imageView = arrangedSubviews[i] as! UIImageView // reuse subview if possible
} else {
imageView = UIImageView()
addArrangedSubview(imageView)
}
if i == currentPage {
imageView.image = currentPageImage
} else {
imageView.image = pageImage
}
}
// remove excess subviews if any
let subviewCount = arrangedSubviews.count
if numberOfPages < subviewCount {
for _ in numberOfPages..<subviewCount {
arrangedSubviews.last?.removeFromSuperview()
}
}
}
private func setCurrentPageIndicator() {
for i in 0..<arrangedSubviews.count {
let imageView = arrangedSubviews[i] as! UIImageView
if i == currentPage {
imageView.image = currentPageImage
} else {
imageView.image = pageImage
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
适用于我的目的,但我不做任何保证
归档时间: |
|
查看次数: |
48121 次 |
最近记录: |