瓦片增加一個Loading動畫
可以查看我的另一個博客WPF中自定義Loading圖
從中心擴散
進行從里到外的擴散,方向是上左下右。如下圖所示文章來源:http://www.zghlxwxcb.cn/news/detail-667797.html
于是我們可以定義一個擁有坐標X跟Y的集合,他允許這個集合,內(nèi)部使用枚舉器的MoveNext自動排序,中心的在前,外面在后。文章來源地址http://www.zghlxwxcb.cn/news/detail-667797.html
public class SpiralArray : IEnumerable<(int, int)>
{
protected (int, int) Range;
public SpiralArray((int, int) range)
{
Range = range;
}
public IEnumerator<(int, int)> GetEnumerator()
{
return new SpiralArrayIEnumerator(Range);
}
IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
}
public class SpiralArrayIEnumerator : IEnumerator<(int, int)>
{
public int Start;
public int End;
public int CenterX;
public int CenterY;
private bool IsOver = false;
private int Direction = 0;// 0 上 1 左 2 : 下 3 : 右
private int Step = 0;
private int CurrentMoveSteps = 0;
private int ChangedDirectionTimes = 0; //改變方向次數(shù)
/// <summary>
/// 構(gòu)造函數(shù)
/// </summary>
/// <param name="range"></param>
public SpiralArrayIEnumerator((int, int) range)
{
Start = range.Item1;
End = range.Item2;
Reset();
}
public (int, int) Current { get; set; }
object IEnumerator.Current => Current;
public void Dispose()
{
}
public bool MoveNext()
{
if(Step == 0)
{
Current = (CenterX, CenterY);
CurrentMoveSteps = 0;
Step = 1;
return true;
}
else
{
// 走一步
CurrentMoveSteps++;
// 改變方向
if(CurrentMoveSteps > Step)
{
Direction = (Direction + 1) % 4;
CurrentMoveSteps = 1;
ChangedDirectionTimes++;
if(ChangedDirectionTimes >= 2)
{
// 步長 + 1
Step++;
ChangedDirectionTimes = 0;
}
}
Move();
if(Current.Item1 >= End || Current.Item2 >= End || Current.Item1 < Start || Current.Item2 < Start)
return false;
return true;
}
}
/// <summary>
/// 移動一步
/// </summary>
private void Move()
{
switch (Direction)
{
// 上
case 0:
Current = (Current.Item1, Current.Item2 - 1);
break;
// 左
case 1:
Current = (Current.Item1 - 1, Current.Item2);
break;
// 下
case 2:
Current = (Current.Item1, Current.Item2 + 1);
break;
// 右
case 3:
Current = (Current.Item1 + 1, Current.Item2);
break;
default:
break;
}
}
public void Reset()
{
CenterX = (End + Start) / 2;
CenterY = (End + Start) / 2;
Current = (CenterX, CenterY);
Direction = 0;
Step = 0;
ChangedDirectionTimes = 0;
IsOver = false;
}
}
到了這里,關(guān)于WPF中手寫地圖控件(3)——動態(tài)加載地圖圖片的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!